如何处理Android应用程序通过滑动杀死代码?

如果我的应用程序正在运行,我按Home键,应用程序在后台。 现在,如果长按主页button并通过从最近的应用程序列表中onPause()应用程序,则不会像onPause()onStop()onDestroy()这样的事件被调用,而是终止进程。 所以,如果我想我的服务停止,杀死通知和取消注册监听,我怎么能做到这一点? 我读了不less文章和博客,但没有得到任何有用的信息,我还没有find任何有关它的文件。 任何帮助,将不胜感激。 提前致谢。

我刚刚解决了类似的问题。

如果应用程序通过从最近的应用程序列表中滑动来终止服务 ,则可以执行以下操作。

在你的Manifest文件中,保持标志stopWithTasktrue的服务。 喜欢:

 <service android:name="com.myapp.MyService" android:stopWithTask="true" /> 

但正如你所说的,你想取消注册听众,并停止通知等,我会build议这种做法:

  1. 在你的Manifest文件里面,保持标志stopWithTaskfalsefalse 。 喜欢:

     <service android:name="com.myapp.MyService" android:stopWithTask="false" /> 
  2. 现在在你的MyService服务中,覆盖方法onTaskRemoved 。 (只有当stopWithTask设置为false才会触发这个function)。

     public void onTaskRemoved(Intent rootIntent) { //unregister listeners //do any other cleanup if required //stop service stopSelf(); } 

请参阅我的问题了解更多细节,也包含其他代码部分。

希望这可以帮助。

我解决了类似的问题。 如果您想要从最近的任务中滑动并在下次启动后正常运行,请按以下步骤操作: –

1)在共享首选项中保存进程ID:

SharedPreferencesUtils.getInstance().putInt(SharedPreferencesUtils.APP_PROCESS_ID, android.os.Process.myPid());

2)当从最近的任务清除后从启动程序启动应用程序然后做:

 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 } 

当你按下home – onPause和你的Activity的onStop被调用时,所以在这个时候你必须做所有的储蓄和清理,因为Android平台不会进一步保证onDestroy或者任何其他的生命周期方法都会被调用,所以这个过程没有任何通知就可能被杀死。

find一个方法来做到这一点

做一个像这样的服务

 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中注册这个服务

 <service android:name="com.example.OnClearFromRecentService" android:stopWithTask="false" /> 

3)然后开始你的飞溅活动这项服务

 startService(new Intent(getBaseContext(), OnClearFromRecentService.class)); 

而现在,每当你将从android最近清除你的应用程序然后这个方法onTaskRemoved()将执行。

onPause()被调用时,您需要保存数据。 看看这个生命周期图: Android Developer

你可以看到一个应用程序可以在onPause()onStop()之后被杀死。

在那里处理你的数据并在onRestart() \ onCreate()恢复它。

祝你好运!

你不能处理滑动,因为系统只是从内存中删除你的进程而不调用任何callback。

我已经检查过,在用户调用“最近的应用程序”屏幕之前,onPause()将始终被调用。 因此,您需要将所有数据保存在onPause方法中,而不检查isFinishing()。

要检查返回button,请使用onBackPressed方法。