0

こんにちは、私は Android(Java) の初心者で、スレッドの使用に問題があります。

Android プロジェクトのクラス内で (5 秒ごとに) 時間指定された新しいスレッドを定義します。「mContinueThread」変数は、5 秒ごとに循環するために使用されます

r = new Runnable() {
    public void run() {
        while (mContinueThread) {
            try {
                Thread.sleep(MILLISEC_BEFORE_RELOAD);
                mHandler.sendEmptyMessage(GET_TRACKING);
            }
            catch (Exception e)
            {

            }
        }
    }
};
t = new Thread(r);

CLass には、Thread で始まるメソッド StartTrack() があります。

public void StartTrack()
{
    mContinueThread=true;
    if (!mThreadIsStarted)
    {
        mThreadIsStarted=true;
        t.start();
    }
    else
    {

    }
}

また、「mContinueThread」変数を使用してスレッドを停止する Logout メソッドもあります。

public void LogOut()
{
    //STOP THREAD
    mContinueThread=false;
    ....
}

クラスで Logout() メソッドが実行された場合、スレッドは停止しますが、 StartTrack() メソッドが再度呼び出された場合、スレッドの実行を再開する方法がわかりません。

手伝って頂けますか?

4

5 に答える 5

1

Android で AsyncTask を使用できます。これにより、スレッドを手動で管理する負担がなくなります。http://developer.android.com/reference/android/os/AsyncTask.htmlにアクセスしてください。

于 2013-05-14T14:15:21.553 に答える
0

スレッドを再開することはできません。スレッドの実行が終了すると、スレッドは DEAD 状態になります。そして、死んだものは、現実の世界でもJAVAの世界でも、再び生き返らせることはできません。

于 2013-05-14T13:12:15.313 に答える
0

私はそう解決しました:

私のクラスでは、Runnable オブジェクトを定義するだけで、新しい Thread は定義しません。

StartTrack method() で、スレッドがまだインスタンス化されていない場合は、スレッドを作成して開始します

public void StartTrack()
{
    mContinueThread=true;

    if (!mThreadIsStarted)
    {
        mThreadIsStarted=true;
        t = new Thread(r);
        t.start();
    }
}

「LogOut()」メソッドでは、Thread が開始されている場合は停止し、それを Null に設定します。

このようにして、「StartTrack()」メソッドの次の呼び出しで、もう一度作成し直すことができます

public void LogOut()
{
    mContinueThread=false;
    if (mThreadIsStarted)
    {
        //THREAD STOP
        mContinueThread=false;
        mThreadIsStarted=false;

        //THREAD TO NULL
        t=null;
    }

    ...
}
于 2013-05-15T07:28:55.043 に答える
0

スレッドが終了している限り、スレッドを再開する方法はありません。新しいスタートを切ることができます。

于 2013-05-14T13:13:17.380 に答える
-1

I suggest it's better to use something like Timer instead of thread.

http://developer.android.com/reference/java/util/Timer.html

Then you can do cancel() if you want to stop execution of your task and resume it by scheduling new one.

于 2013-05-14T13:49:51.823 に答える