アプリが開いているときに、サービスを使用してビュー内のテキストビューを継続的に更新する Android アプリがあります。インテントを送信するブロードキャストレシーバーを使用して更新します。アプリの性質上、アプリが終了した後やビューがなくなった後もサービスを実行し続ける必要があります。この場合、メイン スレッドでサービスを実行するのは明らかに賢明ではありません。では、このサービスを実行し続ける最善の方法は何でしょうか? ASyncTask? 別スレ?どうすればこれを行うことができますか?次のような ASyncTask で試しました。
private class MyTask extends AsyncTask {
@Override
protected Object doInBackground(Object... objects) {
return getActivity().getApplicationContext().startService(intent);
}
@Override
protected void onCancelled() {
getActivity().getApplicationContext().stopService(intent);
super.onCancelled();
}
}
そうそう、これはフラグメントの内部にあるため、getActivity().getApplicationContext() を使用しています。
したがって、これは正常に機能します。開始したいときは MyTask.execute() を呼び出し、停止したいときは MyTask.cancel(true) を呼び出しますが、本来の使い方をしていないと確信しています。execute メソッドの引数として何を使用すればよいかさえわかりません (??)。そして、その中でサービスを開始するだけで、他には何もしないのは最善の考えではないようです。確かに、スレッドだけを使用したほうがうまくいくでしょうか? 意図したとおりに機能させるために、これを行う適切な方法は何ですか? ところで、これはメイン スレッドで実行するよりもはるかに長く機能しますが、数時間後にはクラッシュします。