bob*_*123 6 android accelerometer standby android-wake-lock wakelock
在我的应用程序中,在主要活动的onCreate()方法中,我正在创建唤醒锁定,以便在手机进入待机/屏幕关闭时CPU将继续运行.
同样在onCreate方法中,我有意创建一个使用加速度计的服务.当应用程序打开并监控加速度计值时,此服务需要持续运行(我知道这对电池不利,但我需要它来做).这是我目前的代码,服务开始很好.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Howaya");
wl.acquire();
if (appStart == true)
{
Intent AccelService = new Intent(this, Accelerometer.class);
AccelService.putExtra("unreg", false);
startService(AccelService);
}
appStart = false;
}
Run Code Online (Sandbox Code Playgroud)
我的清单中设置了以下权限 -
<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)
我尝试过不同的锁 - 昏暗的屏幕和全亮度也无济于事.我在logcat上的输出在这里 -
F/PowerManager(15628): android.util.Log$TerribleFailure: WakeLock finalized while still held: Howaya
F/PowerManager(15628): at android.util.Log.wtf(Log.java:260)
F/PowerManager(15628): at android.util.Log.wtf(Log.java:239)
F/PowerManager(15628): at android.os.PowerManager$WakeLock.finalize(PowerManager.java:329)
F/PowerManager(15628): at dalvik.system.NativeStart.run(Native Method)
Run Code Online (Sandbox Code Playgroud)
我见过有人说部分唤醒锁没有像他们应该做的那样工作,比如这个链接谷歌待机错误页面,但这个是去年发布和关闭所以我不知道是这样的,请问有人可以帮忙吗?关于最后一点我也有HTC Desire,谢谢.
出现问题是因为您的WakeLock对象是OnCreate方法中的本地范围变量.在执行方法之后 - 不再引用WakeLock对象 - 因此有资格进行垃圾回收.如果Dalvik GC出现 - 对象已准备好进行最终化 - 并且终结器内部代码警告您,WakeLock仍然保持 - 并且处于活动状态 - 但是将进行GC.您必须获取新的WakeLock对象并将其分配给您的活动派生类中的类类型WakeLock的字段.阅读有关面向对象的编程和垃圾收集器 - 您将了解该问题.
在我的应用程序中,在主活动的 onCreate() 方法中,我创建了一个唤醒锁,以便在手机进入待机状态/屏幕关闭时 CPU 将继续运行。
android:keepScreenOn请改为在布局中的小部件之一上使用。对于活动来说,这比手动处理WakeLock. WAKE_LOCK另外, IIRC,你不需要许可。
我在 logcat 上的输出在这里
该错误是因为您从未释放WakeLock. 请不要泄漏WakeLocks。
现在,您设法写了所有这些散文并包含所有这些列表,但您忘记了一件小事:实际告诉我们您的问题是什么。对于像 StackOverflow 这样的问答网站来说,这是一个相当重要的项目。而且,不,“有人可以帮忙吗?” 如果您从未定义您希望获得什么“帮助”,则不算是一个问题。
| 归档时间: |
|
| 查看次数: |
6195 次 |
| 最近记录: |