繁体   English   中英

在Android 1.5服务中使用唤醒锁

[英]Using a wakelock in a service Android 1.5

您好我正在尝试使用服务来控制唤醒锁,以便我可以在应用程序运行时永久保持屏幕不亮。 我创建唤醒锁并在onCreate()中激活它并在onDestroy()中释放它但是我得到错误“wl无法解析”。 谁能解释我怎么能克服这个? 代码如下:

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();
    }
}

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

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

由于你没有提供太多的背景,很难说你应该做些什么。 通常的事件是这样的。 调用BroadcastReceiver并在onReceive()获取唤醒锁并将其放入服务的静态变量中。 当服务完成后,它应该调用stopSelf() ,释放唤醒锁,然后使保持对锁的引用的静态变量为空。

此外,如果您使用服务,完全唤醒锁很可能不是您想要的,但部分唤醒锁定。 你不需要屏幕保持,对吗?

对不起,但唤醒锁使用起来非常复杂,因为我上面描述的问题正是如此。 这绝对是一个高级主题,很容易搞砸。 如果你这样做,你的应用程序会得到非常难看的评论,因为持续时间过长是一个重大的冒犯,因为它耗尽了电池。 请不要错误地采取这种方式,但鉴于您在此处发布的问题的性质(语法/编译器错误),我强烈建议您搜索没有服务和唤醒锁定的解决方案。

你不是错过了这条线

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM