- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个运行线程的服务。该线程将一些数据保存在一个文件中(在 sdcard 中)。当 Android 进入休眠状态时,我需要服务和线程继续运行。我用 PARTIAL_WAKE_LOCK 试过了,但它不起作用;线程在 Android 休眠时停止。其他锁(如 FULL_WAKE_LOCK)可以使用,但我需要使用 PARTIAL_WAKE_LOCK,因为将来,在该线程中,我将从串行端口读取数据,我不在乎屏幕是否关闭。
不知道是我代码有误,还是我没看懂PARTIAL_WAKE_LOCK。有人可以告诉我为什么我的解决方案不起作用吗?
这是启动服务的主要 Activity 代码的一部分:
public void onClick(View v) {
if (SerialPortService.WAKELOCK == null) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
SerialPortService.WAKELOCK = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, SerialPortService.WL_TAG);
SerialPortService.WAKELOCK.acquire();
startService(new Intent(getApplicationContext(), SerialPortService.class));
}
}
这是服务的代码:
public class SerialPortService extends Service {
public static String WL_TAG = "serial_port_wl_tag";
public static PowerManager.WakeLock WAKELOCK = null;
private BufferedWriter out = null;
private ReadThread readThread;
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
super.onCreate();
try {
File root = Environment.getExternalStorageDirectory();
if (root.canWrite()){
File dataFile = new File(root, "batterytest.txt");
FileWriter dataFileWritter = new FileWriter(dataFile);
out = new BufferedWriter(dataFileWritter);
}
} catch (IOException ioe) {
Log.d("TEST", "Could not open file " + ioe.getMessage());
}
readThread = new ReadThread();
readThread.start();
}
public void onDestroy() {
if (readThread != null) readThread.interrupt();
WAKELOCK.release();
WAKELOCK = null;
try {
out.close();
} catch (IOException ioe) {
Log.d("TEST", "Could not close file " + ioe.getMessage());
}
super.onDestroy();
}
private class ReadThread extends Thread {
public void run() {
super.run();
while (!isInterrupted()) {
try {
Thread.sleep(5000);
if (out != null) {
Calendar now = Calendar.getInstance();
out.write(now.getTime().toString());
out.newLine();
} catch (IOException ioe) {
Log.d("TEST", "Could not read file " + ioe.getMessage());}
return;
} catch (InterruptedException e) {
return;
}
}
}
}
}
最佳答案
好吧,我会回答我的问题。我的代码没问题。几分钟前,我发现问题出在 Eken M009S 平板电脑(中国平板电脑)中 PowerManager 的实现,这是我进行测试的设备。在其他设备中,例如在三星的手机中,PARTIAL_WAKE_LOCK 工作得很好。
关于android - PARTIAL_WAKE_LOCK 和线程在服务中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7360234/
我创建了一个目标 API 15 (ICS) 和空 Activity 的新项目。我添加了 list 权限: 我在 onCreate() 中添加了代码: @Override protected
所有其他唤醒锁都有意义,例如开发人员希望屏幕在执行某些操作时不会关闭。但在部分唤醒锁中 documentation说: If you hold a partial wake lock, the CPU
我有一个运行线程的服务。该线程将一些数据保存在一个文件中(在 sdcard 中)。当 Android 进入休眠状态时,我需要服务和线程继续运行。我用 PARTIAL_WAKE_LOCK 试过了,但它不
我很纠结要不要获取这个wakelock。例如。我有从 onReceive() 调用的这种类型的代码的 BroadcastReceiever (CONNECTIVITY_CHANGE、BOOT_COMP
我写了一个库,它在主应用程序调用特定方法时启动一个 STICKY Service。此服务在执行 onStartCommand() 方法期间获取 PowerManager.PARTIAL_WAKE_LO
我有一个闹钟应用程序,用户联系我说他的闹钟有时会延迟。我尝试了不同的方法和理论,最后建议用户使用默认的 Android 闹钟作为备份。 通常闹钟会延迟大约一个小时,但上次我的闹钟是在 Android
我知道前台服务有“不太可能终止”的行为。根据 Android 文档: It is still theoretically possible for the service to be killed u
我开发了一个小应用程序,这个应用程序必须在设备处于 sleep 或深度 sleep 状态时始终运行(按右键关闭屏幕)我读了很多关于它的帖子,都告诉我方法是使用 PowerManager,我的问题是如果
我正在使用此代码进入 PARTIAL_WAKE_LOCK 模式: PowerManager pm = PowerManager.getSystemService(Context.POWER_SERVI
这里我提到了唤醒屏幕的代码。我希望代码仍然在收听,应用程序已关闭且 CPU 已清除,用户可以在我的屏幕解锁时单击电源按钮应用程序像 whatsapp 一样同步。 PowerManager pm
我正在创建通过 WiFi 和 3G 网络收听广播流的应用程序。 我正在使用 native MediaPlayer。不幸的是,当屏幕变黑并且手机进入待机模式时,媒体播放器开始停止播放音乐。 我已经添加了
我有一个服务生成一个下载线程,有时会下载大文件。我意识到一旦手机进入休眠状态,下载线程就会明显变慢,然后停止。 明显的补救措施,唤醒锁。所以我认为获取 partial_wake_lock 是可以的,只
我正在为我的 MediaPlayer 实例设置一个 PARTIAL_WAKE_LOCK,使用: mMediaPlayer.setWakeMode(getApplicationContext(), Po
我正在尝试为我的 kivy 应用程序获取 PARTIAL_WAKE_LOCK。它基本上是一个定时器应用程序,当屏幕关闭时,定时器应该继续在后台运行。一切工作正常,除了唤醒锁。这就是我在 python
我正在使用 SIP 协议(protocol)开发 IP 语音 (VoIP) 应用程序,该协议(protocol)要求应用程序监听来电。这意味着应用程序不能休眠或死亡。 对于旧代码,这样做的方法似乎是获
我是一名优秀的程序员,十分优秀!