0

アプリがバックグラウンドに送信されても​​実行されるカウントダウンタイマーを作成しようとしていますか? サービスを使用してこれを実装する方法がわからないので、asyncTask の doBackground メソッドで実行することは可能でしょうか。また、アプリが「最小化」されている場合でもタイマーは引き続き実行されますか?

ありがとう

4

2 に答える 2

5

doInBackgroud()別のスレッドで実行されます。ただし、アプリに縛られていないわけではありません。アプリが停止する場合は、AsyncTask停止します。したがって、ここではタイマーは役に立ちません。

あなたができることは、タイマーが切れたことを示すをAlarmManager呼び出すために使用することです。BroadcastReceiverこれにより、 orBroadcastReceiverが呼び出され、好きなことを行うことができます。ServiceActivity

于 2013-11-08T09:33:18.683 に答える
0

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;
}
于 2013-11-08T09:41:12.193 に答える