前回、Serviceに負荷を掛けるとANRが発生することが判明したので、
今回はメイン処理を別スレッドで実行するとどのような結果になるか調査する。
結論から言うと、成功である。
が但し、以下の条件付き。
1.サービスは停止していないが、正常終了しないことが頻繁に発生する。
2.USB接続を切断すると、一定間隔のスレッド起動の予定が
間隔に大きな誤差が生じることが頻繁に発生する。
3.USB接続を切断すると、スレッドが起動しないことが頻繁に発生する。
4.USB接続すると、スレッドが正常に起動することが頻繁に発生する。
1については、アプリの仕様に問題がある可能性が高いので保留とする。
2~4については、開発目的の手順でインストールしたことが原因かも知れないので、
手動でapkファイルを生成してから再度インストールする試験をいずれ実施する。
public class Login01Service extends Service {
private final int REPEAT_INTERVAL = 1 * 60 * 1000;
private Handler handler = new Handler();
private Runnable runnable;
@Override
public void onStart(Intent intent, int startId) {
//このおまじないのおかげでサービスが殺されにくくなっている?
Notification lNotification = new Notification(0, "ticker", System.currentTimeMillis());
startForeground(1, lNotification);
runnable = new Runnable() {
public void run() {
//繰り返し処理
mainTran();
handler.postDelayed(this, REPEAT_INTERVAL);
}
};
handler.postDelayed(runnable, REPEAT_INTERVAL);
}
}