0

カウントダウンタイマーを保持するアクティビティをプログラムしようとしています。私はこれを新しいスレッドで作成します。アプリがバックグラウンドに送信されると、このカウントダウンタイマーはスレッド内を継続します。問題は、アクティビティを再開するときです。同じことをする別のスレッドを作成します。

したがって、新しいコピーを作成せずに、アプリがバックグラウンドに送信される前に作成された以前のスレッドを「回復」できる方法はありますか?

コードは次のとおりです。

public class MainActivity extends FragmentActivity{

private static final String TAG = Values.Tags.MAIN_ACTIVITY;
private TextView timeTextView;
final Handler mHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    // GENERAL ACTIVITY TASKS (all activities should do these).
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // MAIN_ACTIVITY TASKS.
    timeTextView = (TextView) findViewById(R.id.activityMain_timer);

    createThread();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void buttonPressed(View view){
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");
}

public static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), this, 0, 0, true);
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        Log.d(TAG, "set time");
        getPickedTime(hourOfDay, minute);
    }

}

public static void getPickedTime(int hourOfDay, int minute) {
    Log.d(TAG, "Hora: "+hourOfDay+", minute: "+minute);
}

private void createThread() {
    Thread thread = new Thread(){
        public void run(){
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e){
                Log.d(TAG, e.getMessage());
            }
            Log.d(TAG, this.getName()+ " is about to complete...");
            mHandler.post(doAction);
        }
    };
    thread.setName("thread00");
    thread.start();
}

final Runnable doAction = new Runnable(){
    public void run(){
        Log.d(TAG, "Completed.");
    }
};

}

ありがとう。

4

3 に答える 3

0

スレッドに変数を作成する

Boolean isRunning = false;

スレッドが開始したら、このようにアプリの共有設定に入れます..

isRunning = true;
SharedPreferences settings = getSharedPreferences("isThreadRunning", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("isRunning", isRunning);
editor.commit();

スレッドが Finished になったら、それを false に戻します。

isRunning = false;

OnCreate() で、同じ設定を読み取ります

SharedPreferences settings = getSharedPreferences("isThreadRunning", 0);
boolean running = settings.getBoolean("silentMode", false); 

if(running){
   //Thread already running
}else{
   //the thread isnt running so lets start it.
}
于 2013-01-30T12:12:17.517 に答える
0

私がやりたいことは、スレッドだけでは不可能だと思いました。サービスを利用するべきだと思います。

于 2013-01-30T09:19:27.733 に答える
0

コードを投稿していただけると助かります。今推測するだけで、onresume ではなく oncreate メソッドでスレッドを開始することを提案しています。ondestroy でアクティビティを破棄している間、スレッドを停止します。

于 2013-01-25T05:00:24.197 に答える