屏幕关闭时保持活动状态

时间:2012-08-27 15:22:22

标签: android android-activity

我有一项服务可以启动新活动,而屏幕则关闭。 我希望活动保持暂停模式,而不是进入停止模式。 有没有办法实现这个目标?

7 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

你做不到。无论如何它都会被杀死。 但您可以使用Service从服务接收Intent.ACTION_SCREEN_ON广播和重新启动活动。 从服务检查here

重新启动您的活动

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

Android developer documentation引用处于“killable”状态的应用程序。虽然Android尝试在应用程序退出后(即在onDestroy之后)保持应用程序驻留进程,但它确实需要能够在资源不足的情况下终止这些进程以回收内存。 应用程序可停用的状态因操作系统版本而异。在所有Android版本上,从onStoponDestroy返回的应用程序都可以无声地播放。在Honeycomb之前的Android版本中,从onPause返回的应用程序也是可以使用的。简单易用意味着Android保留随时终止您的应用程序流程的权利,而无需运行应用程序代码的其他指令。换句话说,如果您有任何必须可恢复的状态(例如玩家的游戏进度,项目,奖励等),您必须在进入可充足状态之前不迟于最后一次回调将其保存到持久存储中。

此外,虽然应用程序可以运行本机线程,即使它们处于可用状态 状态,甚至post { - 1}},这是要避免的,因为进程kill也会杀死那些线程。这可能会导致各种腐败和关机问题。

Source

答案 4 :(得分:0)

我现在不完全是你对暂停模式或停止模式的意思。如果你的意思是cpu一直醒来,请看this

使用partial_wake_look,您可以拥有一个长时间运行的AsyncTask,例如屏幕时也是如此。别忘了释放唤醒。

答案 5 :(得分:0)

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

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

要做到这一点:

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

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

答案 6 :(得分:0)

Lame hack将在活动的onStop()内调用onPause()方法