在Android 1.5服务中使用唤醒锁

Tom*_*Tom 6 java android android-service android-wake-lock android-1.5-cupcake

您好我正在尝试使用服务来控制唤醒锁,以便我可以在应用程序运行时永久保持屏幕不亮.我创建唤醒锁并在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*amp 9

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

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

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

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

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


Rut*_*ing 5

你不是错过了这条线

    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
Run Code Online (Sandbox Code Playgroud)

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

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