12

我得到了一项服务,可以在屏幕关闭时启动新活动。我希望活动保持暂停模式,而不是进入停止模式。有没有办法做到这一点?

4

7 回答 7

6

不,您无法控制 Activity 生命周期。您需要在屏幕关闭时运行的任何进程都必须在Service. 每当屏幕重新打开时,您都必须重建应用程序状态。始终假设Activity可以随时从内存中擦除。

于 2012-08-27T15:25:44.790 回答
1

你不能那样做。无论如何它都会被杀死。但您可以使用 aService接收来自 Service的广播Intent.ACTION_SCREEN_ON重新启动活动。从服务检查这里重新启动您的活动

于 2017-02-16T20:27:33.587 回答
0

没有办法做到这一点。您的应用程序与活动生命周期相关联,并且必须分解/恢复活动以使用生命周期。

于 2012-08-27T15:26:31.817 回答
0

您不能覆盖该onDestroy()方法,并且每个操作系统版本都会以不同的方式处理应用程序被“杀死”的方式。

Android 开发者文档提到了处于“可杀死”状态的应用程序。尽管 Android 试图在应用程序退出后(即之后onDestroy)保持其进程常驻,但它确实需要能够在资源不足的情况下终止这些进程以回收内存。 应用程序可终止的状态因操作系统版本而异。在所有版本的 Android 上,已返回onStoponDestroy可静默杀死的应用程序。在 Honeycomb 之前的 Android 版本上,从onPause也是可以杀死的。简单可杀意味着 Android 保留随时终止应用程序进程的权利,甚至无需运行应用程序代码的另一条指令。换句话说,如果您有任何必须可恢复的状态(例如玩家的游戏进度、物品、奖励等),您必须在进入可杀死状态之前的最后一次回调之前将它们保存到持久存储中。

此外,虽然应用程序可以运行本机线程,即使它们处于可终止状态甚至是 post- onDestroy,但应避免这种情况,因为进程终止也会终止这些线程。这可能会导致各种损坏和关机问题。

资源

于 2012-08-27T15:26:45.807 回答
0

我现在不完全是您对暂停模式或停止模式的意思。如果您的意思是 CPU 保持唤醒,请查看

使用 partial_wake_look 你可以有一个长时间运行的 AsyncTask 例如当屏幕是的时候。不要忘记释放wakelook。

于 2012-08-27T15:33:27.110 回答
0

为什么需要这样做?也许最好的解决方案是按照@DeeV 的建议将其作为服务运行。但是,根据您需要做什么,这可能会有所帮助:

要求 Android 在屏幕打开时通知您(如果需要,也可以关闭)。因此,您的活动可以立即恢复并开始,您可以执行任何操作。

要做到这一点:

  • 创建一个扩展应用程序的类
  • 在您的清单中注册它:
  • 在 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);
    
    • 在 public void onTerminate() {...,添加:

if (broadcastReceiver != null) { context.unregisterReceiver(broadcastReceiver); }

于 2012-08-27T15:36:35.003 回答
0

蹩脚的技巧是在活动的 onStop() 中调用 onPause() 方法

于 2017-02-16T21:37:13.177 回答