如何处理Android应用程序通过滑动杀死代码?
如果我的应用程序正在运行,我按Home键,应用程序在后台。 现在,如果长按主页button并通过从最近的应用程序列表中onPause()
应用程序,则不会像onPause()
, onStop()
或onDestroy()
这样的事件被调用,而是终止进程。 所以,如果我想我的服务停止,杀死通知和取消注册监听,我怎么能做到这一点? 我读了不less文章和博客,但没有得到任何有用的信息,我还没有find任何有关它的文件。 任何帮助,将不胜感激。 提前致谢。
我刚刚解决了类似的问题。
如果应用程序通过从最近的应用程序列表中滑动来终止服务 ,则可以执行以下操作。
在你的Manifest文件中,保持标志stopWithTask
为true
的服务。 喜欢:
<service android:name="com.myapp.MyService" android:stopWithTask="true" />
但正如你所说的,你想取消注册听众,并停止通知等,我会build议这种做法:
-
在你的Manifest文件里面,保持标志
stopWithTask
为false
为false
。 喜欢:<service android:name="com.myapp.MyService" android:stopWithTask="false" />
-
现在在你的
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方法。