我有一个服务在屏幕关闭时启动了一个新的活动。 我希望该活动保持暂停状态,而不是进入停止状态。 是否有方法可以实现这一点?
我有一个服务在屏幕关闭时启动了一个新的活动。 我希望该活动保持暂停状态,而不是进入停止状态。 是否有方法可以实现这一点?
不,您无法控制活动生命周期。任何在屏幕关闭时需要运行的进程都必须在Service
中执行。每当屏幕重新打开时,都必须重建应用程序状态。始终假设Activity
随时可能被从内存中清除。
你不能这样做。它将被终止。但你可以使用一个Service
来接收Intent.ACTION_SCREEN_ON
的广播,并从服务中重新启动Activity。要从服务中重新启动你的Activity,请查看这里
你无法覆盖onDestroy()
方法,每个操作系统版本处理应用程序“被杀死”的方式都不同。
Android开发者文档提到了应用程序处于“可杀死”状态。虽然Android尝试在应用程序退出后(即在onDestroy
之后)仍保持其进程驻留,但需要能够在低资源情况下终止这些进程以回收内存。应用程序处于可杀死状态的状态因操作系统版本而异。在所有Android版本上,已返回onStop
或onDestroy
的应用程序可以静默地被终止。在Honeycomb之前的Android版本中,已返回onPause
的应用程序也可以被终止。可杀死意味着Android保留随时终止应用程序进程的权利,甚至不运行您的应用程序代码的另一个指令。换句话说,如果您有任何必须恢复的状态(例如玩家的游戏进度、物品、奖励等),您必须将它们保存到持久存储中,最迟在进入可杀死状态之前的最后一个回调之前保存。
onDestroy
后也可以运行,但应该避免这样做,因为进程终止也会终止这些线程。这可能会导致各种损坏和关闭问题。
onPause()
和 onResume()
来实现,但要注意当屏幕关闭时可能会调用 onDestroy()
。 - jnthnjns在public void onCreate() {...中,添加以下内容:
IntentFilter ioff = new IntentFilter(Intent.ACTION_SCREEN_OFF);
IntentFilter ion = new IntentFilter(Intent.ACTION_SCREEN_ON);
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_SCREEN_OFF.equals(action)) {
//TODO
} else {
//TODO
}
}
};
context.registerReceiver(broadcastReceiver, ioff);
context.registerReceiver(broadcastReceiver, ion);
一种简单的hack方法是在activity的onStop()方法中调用onPause()方法。
无法实现此功能。您的应用程序与Activity生命周期绑定,必须分解/恢复Activities以与生命周期一起使用。
我不确定你所说的暂停模式或停止模式是什么意思。如果你的意思是CPU保持唤醒状态,请看一下this。
使用partial_wake_look,你可以在屏幕关闭时运行长时间的AsyncTask等操作。别忘了释放wakelook。