您好,我试图用一个服务来控制激活锁定,所以我可以永远离开我的应用程序运行时在屏幕上。我创建了激活锁定并激活它的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();
    }
}
有帮助吗?

解决方案

你不缺行

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

在的onDestroy()?它是在的onCreate()的局部变量,但它不是在的onDestroy()在所有声明。

或者,更可能的,你可能想使它类WakeLockService而不是一个局部变量的一个领域。

其他提示

好吧,就算你会用一个实例变量,我认为这是不这样做的方式。 谁是要打电话destroy()?我希望不是你,这是操作系统的工作这样做。 但是,当你持有唤醒锁是极不可能的,你destroy()方法被调用,因为操作系统会首先摧毁其他活动/服务。

此外,它是太晚收购的onCreate()方法之后锁定。达到onCreate()之前的手机可能已经走了,当你从一个活动,是在后台触发从报警与服务已经睡了。

这很难说,你应该做出什么不同的,你不给太多的上下文。 事件的一般业务过程是这样的。 一个BroadcastReceiver被调用,并在onReceive()您获得唤醒锁,并把它在一个静态变量的为您服务。当服务完成它应该调用stopSelf(),松开唤醒锁,然后空,保持于锁基准的静态变量。

另外,如果你使用的服务的全面唤醒锁很可能不是你想要的,但局部唤醒锁。你不需要在屏幕留下来,对不对?

抱歉,唤醒锁定真正使用复杂的,因为正是我上面描述的问题。这是明确的高级的话题,很容易搞砸了。如果你这样做,你的应用程序将变得非常难看的意见,因为持有时间过长是一个重大的罪行,因为它消耗电池电量。 不要采取这种错误的方式请,但给你贴这里的问题的性质(语法/编译器错误),我强烈建议寻找没有服务和唤醒锁的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top