保持屏幕关闭时的活动

13

我有一个服务在屏幕关闭时启动了一个新的活动。 我希望该活动保持暂停状态,而不是进入停止状态。 是否有方法可以实现这一点?


1
你能详细说明为什么你想这样做吗? - Vins
分享一下你想要实现什么,也许我们能够提供一些替代方案。 - Hitesh Sahu
7个回答

7

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


1

你不能这样做。它将被终止。但你可以使用一个Service来接收Intent.ACTION_SCREEN_ON的广播,并从服务中重新启动Activity。要从服务中重新启动你的Activity,请查看这里


1

你无法覆盖onDestroy()方法,每个操作系统版本处理应用程序“被杀死”的方式都不同。

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

此外,尽管应用程序可以在可杀死状态下运行本地线程,甚至在 post-onDestroy 后也可以运行,但应该避免这样做,因为进程终止也会终止这些线程。这可能会导致各种损坏和关闭问题。

来源


但我希望我的活动在屏幕开启时尽可能快地显示。 - Chen Kinnrot
如果我理解正确的话,你应该能够通过 onPause()onResume() 来实现,但要注意当屏幕关闭时可能会调用 onDestroy() - jnthnjns
同时,不能确定 onDestroy() 方法一定会被调用。 - Thracian

0
为什么你需要这样做呢?也许最好的解决方案是按照 @DeeV 的建议将其作为服务运行。但是,根据你需要做什么,这可能有所帮助:
请求 Android 在屏幕打开时(如果需要,也可以在关闭时)通知你。这样,你的活动就可以立即恢复和启动,并且你可以执行任何操作。
要实现这一点:
  • 创建一个继承Application的类
  • 在Manifest中注册它:
  • 在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() {...中,添加以下内容:
如果 (broadcastReceiver != null) { context.unregisterReceiver(broadcastReceiver); }

请查看此链接:http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/ - Jorge Cevallos
谢谢,我已经在使用这个东西了,问题是屏幕反应非常慢,所以我正在关闭屏幕,并尝试保持自己的生命。 - Chen Kinnrot

0

一种简单的hack方法是在activity的onStop()方法中调用onPause()方法。


0

无法实现此功能。您的应用程序与Activity生命周期绑定,必须分解/恢复Activities以与生命周期一起使用。


0

我不确定你所说的暂停模式或停止模式是什么意思。如果你的意思是CPU保持唤醒状态,请看一下this

使用partial_wake_look,你可以在屏幕关闭时运行长时间的AsyncTask等操作。别忘了释放wakelook。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接