1.第一个问题:例如qq,当你聊天的时候,然后你按了返回键,或home键,APP进入后台,但是我的APP,总会先进入Splash页面,再进入app 解决方式很简单,例如你的主页面为HomeActivity,重写他的方法:
@Override public void onBackPressed() { moveTaskToBack(true); }就ok了。 2、但是第二个问题出现了,就是系统会回收你的进程,还是会重新欺辱Splash页面
<service android:name=".service.GrayService$GrayInnerService" android:enabled="true" android:exported="false" android:process=":gray" /> <receiver android:name=".service.WakeReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="com.wake.gray" /> </intent-filter> </receiver>Application中进行的OnCreate启动
Intent grayIntent = new Intent(MyApplication.getContext(), GrayService.class); startService(grayIntent); package mailongit.com.mailongshop.service; import android.app.AlarmManager; import android.app.Notification; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.IBinder; /** * Created by li on 2017/5/6. */ public class GrayService extends Service { /** * 定时唤醒的时间间隔,5分钟 */ private final static int ALARM_INTERVAL = 5* 60 * 1000; private final static int WAKE_REQUEST_CODE = 6666; private final static int GRAY_SERVICE_ID = -1001; @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (Build.VERSION.SDK_INT < 18) { startForeground(GRAY_SERVICE_ID, new Notification());//API < 18 ,此方法能有效隐藏Notification上的图标 } else { Intent innerIntent = new Intent(this, GrayInnerService.class); startService(innerIntent); startForeground(GRAY_SERVICE_ID, new Notification()); } //发送唤醒广播来促使挂掉的UI进程重新启动起来 AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent alarmIntent = new Intent(); alarmIntent.setAction(WakeReceiver.GRAY_WAKE_ACTION); PendingIntent operation = PendingIntent.getBroadcast(this, WAKE_REQUEST_CODE, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), ALARM_INTERVAL, operation); return START_STICKY; } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } @Override public void onDestroy() { super.onDestroy(); } /** * 给 API >= 18 的平台上用的灰色保活手段 */ public static class GrayInnerService extends Service { @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { startForeground(GRAY_SERVICE_ID, new Notification()); stopSelf(); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } @Override public void onDestroy() { super.onDestroy(); } } } package mailongit.com.mailongshop.service; import android.app.Notification; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.IBinder; public class WakeReceiver extends BroadcastReceiver { private final static int WAKE_SERVICE_ID = -1111; /** * 灰色保活手段唤醒广播的action */ public final static String GRAY_WAKE_ACTION = "com.wake.gray"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (GRAY_WAKE_ACTION.equals(action)) { Intent wakeIntent = new Intent(context, WakeGrayInnerService.class); context.startService(wakeIntent); } } /** * 给 API >= 18 的平台上用的灰色保活手段 */ public static class WakeGrayInnerService extends Service { @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { startForeground(WAKE_SERVICE_ID, new Notification()); stopSelf(); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } @Override public void onDestroy() { super.onDestroy(); } } }这是用的最多的一种方式保活,最后感谢作者。 附上原作者的github地址(https://github.com/D-clock/AndroidDaemonService)