2016-07-05 10 views
0

私のAndroidアプリは現在、BLスレッドを呼び出しているAsyncTaskを使って実装されたスレッドにビジネスロジックを処理再開します。一時停止とはAsyncTaskのAndroid

BL UIスレッドにFragmentを追加して、ユーザーにいくつかの個人データ(名前、パスワードなど)を入力するように要求します。この時点で、BLスレッドを停止し、ユーザーの名前、パスワードなどを入力するまで待ってから、OKボタンを押してからBLスレッドを続行します。

Androidでどのように達成できますか?

答えて

0

一時停止AsynkTaskは最良の選択ではありません。 GoogleサンプルアプリDisplayingBitmapsでAsynkTaskを一時停止する例は、ImageWorkerクラスにあります。

private class BitmapWorkerTask extends AsynkTask<Void, Void, BitmapDrawable> { 
    @Override 
    protected BitmapDrawable doInBackground(Void... params) { 
    synchronized (mPauseWorkLock) { 
     while (mPauseWork && !isCancelled()) { 
     try { 
      mPauseWorkLock.wait(); 
     } catch (InterruptedException e) {} 
     } 
    } 
    } 
    ... 
} 

public void setPauseWork(boolean pauseWork) { 
    synchronized(mPauseWorkLock) { 
    mPauseWork = pauseWork; 
    if (!mPauseWork) { 
     mPauseWorkLock.notifyAll(); 
    } 
    } 
} 
0

AsyncTaskは、1回/ 1回のタスクを実行することになっています。

これは、AsyncTaskをうまく使用することはできません。 AsyncTasksは仕事をしてやるべきで、ぶら下がってはいけません。

あなたは例えばのThread.sleep()を使用してWeb上の汚れた解決策を見つけるでしょう。それらは本当に悪い解決策です。

使用すると、2つの異なるプロセスが必要な場合は、あなたがキャンセルすることができ、あなたの問題には2つの異なるタスク

を作成する必要がありますに()あなたのバックグラウンドスレッドまたはasynsTask、および必要に応じて、多分更新されたパラメータで新しいものを作成

0

ます

は、新しいスレッドを作成し、残りの作業を行います新しいボタンのリスナーを定義し、[OK]ボタンでフラグメントを作成する場合... 1つのAsyncTaskの内側にそれをすべて行うべきではありません。

あなたが機能をseprate、まだバックグラウンド実行を維持するためのタスクを区切ることができるようにそのためのサービスまたはサービスの意図ではなくAsyncTaskを使用する場合があります。

関連する問題