アプリがバックグラウンドに送信されても実行されるカウントダウンタイマーを作成しようとしていますか? サービスを使用してこれを実装する方法がわからないので、asyncTask の doBackground メソッドで実行することは可能でしょうか。また、アプリが「最小化」されている場合でもタイマーは引き続き実行されますか?
ありがとう
アプリがバックグラウンドに送信されても実行されるカウントダウンタイマーを作成しようとしていますか? サービスを使用してこれを実装する方法がわからないので、asyncTask の doBackground メソッドで実行することは可能でしょうか。また、アプリが「最小化」されている場合でもタイマーは引き続き実行されますか?
ありがとう
doInBackgroud()
別のスレッドで実行されます。ただし、アプリに縛られていないわけではありません。アプリが停止する場合は、AsyncTask
停止します。したがって、ここではタイマーは役に立ちません。
あなたができることは、タイマーが切れたことを示すをAlarmManager
呼び出すために使用することです。BroadcastReceiver
これにより、 orBroadcastReceiver
が呼び出され、好きなことを行うことができます。Service
Activity
asynctask を使用してカウントダウン タイマーを実行し、UI に表示する場合は、UI に干渉できないため、doInBackground を使用できません。
この問題にはスレッドを使用する必要があると思います。アプリが最小化されているときにタイマーを実行し続けたい/したくない場合は、ブール変数を使用して制御できます(runOnUiThreadを使用してUIに干渉する必要があります)
使い方:
boolean stop=false;
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (!stop) {
//YOUR CODE HERE
}
}
});
アプリの最小化時にタイマーを停止したい場合は、アクティビティの設定stop=true
を使用できますonPause()
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
stop=true;
}
アクティビティが再開したときにタイマーを再生したい場合は、次のように設定できstop=false
ますonResume()
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
stop=false;
}