首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >手机显示超时期间的活动生命周期

手机显示超时期间的活动生命周期
EN

Stack Overflow用户
提问于 2011-01-30 02:03:21
回答 3查看 2.4K关注 0票数 0

今天我注意到了一些很有趣的事情。当手机显示超时时,活动生命周期似乎略有差异。让我举个例子来解释。

我有一个活动,用加速度计振动电话。在onPause事件中,我取消了SensorManager侦听器的注册,这样当我的活动不再是主要焦点时,我就不会震动电话。

但是,我注意到,如果显示关闭,然后回到我的活动中,甚至在我解锁屏幕、输入密码和显示我的活动之前,SensorManager侦听器就已经注册了。

现在我意识到这是我自己对我期望它如何工作的解释,但对我来说,这似乎是相当奇怪的,因为我的活动还不是主要的焦点。我希望SensorManager侦听器没有注册,因为onResume还没有被调用。这显然不是这样,当我可以使我的手机振动从锁屏幕和密码屏幕。

那么,谁能解释一下为什么会有这种行为?第二,我能做些什么来绕过它呢?

谢谢。

编辑以实现清晰性

我用加速度计通过移动手机触发震动。这是通过SensorManager侦听器完成的。

设想情况:

我的活动在前台(主要焦点)。我通过移动电话触发震动。显示超时。此时我无法触发震动。我按家庭/电源显示屏幕。我现在可以振动我的手机,即使锁屏幕或密码屏幕显示,我的活动不在前台。

我无法验证,当显示器关闭时,我不能震动手机的原因是因为onPause被调用了,还是操作系统有一些固有的东西阻止了它。或者换一种说法,我也无法验证当显示器打开时是否调用了onResume

所有这些的关键是了解手机显示被关闭时的活动生命周期。不幸的是,我的期望是它会遵循我们都学到的相同的生命周期图。我的看法是,这是不同的。

EN

回答 3

Stack Overflow用户

发布于 2011-09-08 19:45:34

这是你说的。

“希望SensorManager侦听器没有注册,因为onResume还没有被调用。显然,当我的手机可以在锁屏和密码屏幕上振动时,情况就不是这样了。”

onResume 是在你解锁手机之前打给

票数 2
EN

Stack Overflow用户

发布于 2011-11-12 06:52:22

下面的代码将处理屏幕关闭和屏幕的意图。也许您可以在屏幕打开后才调用onResume()中的onResume(),并在活动再次聚焦时调用和调用onResume()。

代码语言:javascript
运行
复制
public class ExampleActivity extends Activity {

   @Override
    protected void onCreate() {
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        BroadcastReceiver mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);
    }

    @Override
    protected void onPause() {
        if (ScreenReceiver.wasScreenOn) {
            System.out.println("onPause() called because screen turned off.");
        } else {
            System.out.println("normal onPause() call");
        }
        super.onPause();
    }

    @Override
    protected void onResume() {
        if (!ScreenReceiver.wasScreenOn) {
            System.out.println("onResume() called when screen turns on");
        } else {
            System.out.println("normal onResume() call");
        }
        super.onResume();
    }

}
票数 2
EN

Stack Overflow用户

发布于 2011-01-30 02:47:54

阿。你的编辑告诉我们为什么会发生这种事。

问题是,当你的“屏幕超时”和手机变黑,正在发生的是手机实际上是要睡觉。操作系统可能会进入低功耗状态,不同事物的听者都会转向,并且可能会关闭加速度计和/或振动器。

如果你真的想要活动能够振动,试着保持一个唤醒锁。

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4840691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档