How to handle code when app is killed by swiping in android?
如果我的应用程序正在运行,我按下主页按钮,应用程序进入后台。 现在如果长按主页按钮并通过从最近的应用程序列表中滑动来杀死应用程序,则不会调用
任何帮助,将不胜感激。
提前致谢。
我刚刚解决了类似的问题。
如果通过从最近的应用程序列表中轻扫应用程序而终止服务,那么您可以执行以下操作。
在Manifest文件中,将标志
1 2 3 | <service android:name="com.myapp.MyService" android:stopWithTask="true" /> |
但正如你所说,你想取消注册听众并停止通知等,我会建议这种方法:
在Manifest文件中,将标志
1 2 3 | <service android:name="com.myapp.MyService" android:stopWithTask="false" /> |
现在在
1 2 3 4 5 6 7 8 | public void onTaskRemoved(Intent rootIntent) { //unregister listeners //do any other cleanup if required //stop service stopSelf(); } |
请参阅我的问题以获取更多详细信息,其中也包含其他部分代码。
希望这可以帮助。
找到了一种方法来做到这一点
像这样做一个服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class OnClearFromRecentService extends Service { @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d("ClearFromRecentService","Service Started"); return START_NOT_STICKY; } @Override public void onDestroy() { super.onDestroy(); Log.d("ClearFromRecentService","Service Destroyed"); } @Override public void onTaskRemoved(Intent rootIntent) { Log.e("ClearFromRecentService","END"); //Code here stopSelf(); } |
}
2)在manifest.xml中注册此服务
1 | <service android:name="com.example.OnClearFromRecentService" android:stopWithTask="false" /> |
3)然后在您的启动活动上启动此服务
1 | startService(new Intent(getBaseContext(), OnClearFromRecentService.class)); |
现在每当你从android最近清除你的应用程序然后这个方法onTaskRemoved()将执行。
我解决了类似的问题。如果您想要从最近的任务中滑动并在下次启动它时表现得正常,请按照以下步骤操作: -
1)在共享首选项中保存进程ID:
2)从最近的任务清除后从启动器启动应用程序然后执行:
1 2 3 4 5 6 7 8 9 | int previousProcessID = mSharedPreferencesUtils.getInt(SharedPreferencesUtils.APP_PROCESS_ID); int currentProcessID = android.os.Process.myPid(); if ((previousProcessID == currentProcessID)) { // This ensures application not killed yet either by clearing recent or anyway } else { // This ensures application killed either by clearing recent or by anyother means } |
当您按下主页 - 正在调用您的Activity的
您无法处理滑动,因为系统只是从内存中删除您的进程而不调用任何回调。
我已经检查过,在用户调用"最近的应用程序"屏幕之前,将始终调用onPause()。因此,您需要在onPause方法中保存所有数据,而不检查isFinishing()。
要检查后退按钮,请使用onBackPressed方法。
在调用
看看这个生命周期图:
Android开发者
你可以看到一个应用程序可以在
处理您的数据并在
祝好运!
这适用于android 6,7,8,9。
制作一个这样的服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class OnClearFromRecentService extends Service { @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d("ClearFromRecentService","Service Started"); return START_NOT_STICKY; } @Override public void onDestroy() { super.onDestroy(); Log.d("ClearFromRecentService","Service Destroyed"); } @Override public void onTaskRemoved(Intent rootIntent) { Log.e("ClearFromRecentService","END"); //Code here stopSelf(); } } |
2)在
1 2 | <service android:name="com.example.OnClearFromRecentService" android:stopWithTask="false" /> |
3)然后在您的启动活动上启动此服务
1 2 | startService(new Intent(getBaseContext(), OnClearFromRecentService.class)); |