У меня есть служба, которая запускает поток. Поток сохраняет некоторые данные в файле (в sdcard). Когда Android перейдет в спящий режим, мне нужно, чтобы сервис и поток продолжали работать. Я пробовал это с PARTIAL_WAKE_LOCK, но это не работает; поток останавливается во время сна Android. Другие блокировки, такие как FULL_WAKE_LOCK, работают, но мне нужно использовать PARTIAL_WAKE_LOCK, потому что в будущем, в этом потоке я буду читать с последовательного порта и мне все равно, что экран выключен.
Я не знаю, есть ли у меня какая-то ошибка в коде, или я не понимаю PARTIAL_WAKE_LOCK. Кто-то может сказать мне, почему мое решение не работает?
Это часть кода основного вида деятельности, где сервис уставлен:
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;
}
}
}
}
}
-121--1350440- Есть ли простой способ проверить, имеет ли значение DateTime
значение NULL, отличное от проверки 0 часа, min = 0 и sec = 0?
Спасибо.