【问题标题】:Using a wakelock in a service Android 1.5在 Android 1.5 服务中使用唤醒锁
【发布时间】:2010-11-02 19:29:59
【问题描述】:

您好,我正在尝试使用服务来控制唤醒锁,以便在我的应用程序运行时永久保持屏幕开启。我创建唤醒锁并在 onCreate() 中激活它并在 onDestroy() 中释放它,但是我收到错误“wl cannot be resolved”。有人可以解释我如何克服这个问题吗?代码如下:

public class WakeLockService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }  
    @Override
    public void onCreate() {
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
        wl.acquire();
    }
    @Override
    public void onDestroy() {
        wl.release();
    }
}

【问题讨论】:

    标签: java android android-service android-wake-lock android-1.5-cupcake


    【解决方案1】:

    好吧,即使您会使用实例变量,我也认为这不是这样做的方法。 谁会打电话给destroy()?我希望不是你,这是操作系统的工作。 但是,当您持有唤醒锁时,您的 destroy() 方法极不可能被调用,因为操作系统会首先破坏其他活动/服务。

    除此之外,在onCreate() 方法中获取唤醒锁为时已晚。在到达onCreate() 之前,当您从警报触发服务而不是从后台活动触发服务时,手机可能已经进入睡眠状态。

    由于您没有提供太多背景信息,因此很难说您应该做出什么不同。 通常的事件过程是这样的。 BroadcastReceiver 被调用并在 onReceive() 中获取唤醒锁并将其放入服务的静态变量中。服务完成后,它应该调用stopSelf(),释放唤醒锁,然后将保持对锁的引用的静态变量清空。

    此外,如果您使用服务,则很可能不是您想要的完全唤醒锁,而是部分唤醒锁。你不需要屏幕一直亮着,对吧?

    抱歉,由于我上面描述的问题,唤醒锁的使用确实很复杂。这绝对是一个高级主题,很容易搞砸。如果你这样做了,你的应用程序会变得非常丑陋,因为坚持太久会耗尽电池电量。 请不要采取错误的方式,但鉴于您在此处发布的问题的性质(语法/编译器错误),我强烈建议您搜索没有服务和唤醒锁的解决方案。

    【讨论】:

    • 感谢您的评论。在我正在开发的应用程序中,我需要手机处于 100% 唤醒模式,因此我使用了完全唤醒锁。
    • 部分唤醒锁应该足以启动 CPU 并使用网络。
    • 也感谢我。你的解释很简洁,比问题和答案的结合更有帮助:)
    • 谢谢。 Android 开发者页面没有像你那样解释唤醒锁
    【解决方案2】:

    你是不是错过了这条线

        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
    

    在 onDestroy() 中?它是onCreate()中的一个局部变量,但它根本没有在onDestroy()中声明。

    或者,更有可能的是,您可能希望将其设为 WakeLockService 类的字段,而不是局部变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多