PARTIAL _ WAKE _ LOCK и поток, выполняющийся в службе

У меня есть служба, которая запускает поток. Поток сохраняет некоторые данные в файле (в 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- C # DateTime - Как проверить, что часть времени имеет значение NULL? Есть ли простой способ проверить, имеет ли часть времени значения DateTime значение NULL, отличное от часа проверки 0, min равно 0 и sec равно 0? Спасибо.

Есть ли простой способ проверить, имеет ли значение DateTime значение NULL, отличное от проверки 0 часа, min = 0 и sec = 0?

Спасибо.

15
задан davmos 25 August 2014 в 21:08
поделиться