1

次のコードを使用してURLにアクセスしています。

final Handler handler = new Handler();
Runnable runnable = new Runnable() 
{
   public void run() 
   {
       img.setImageBitmap(returnBitmap("fromurl")); 
       handler.postDelayed(this, 50);  
   }
};

handler.postDelayed(runnable, 2000);

サーバーが起動していない場合、戻るボタンを押すとアプリが正しく閉じるまでに時間がかかることがわかりました。とにかく、終了手順をスピードアップできる方法はありますか?

4

2 に答える 2

1

Runnableは、メソッドが終了すると自動的に終了しますrun()。ループを使用して作業を行う場合、Jay Hoが提案した解決策は、ループをきれいに終了するのに役立ちます。Handlerランナブルが(投稿する前に)実行されないようにする場合は、 handler.removeCallbacksAndMessages(null)1を使用してキューをクリアできます。それを入れるのonDestroy()が最善の策です。そうでなければ、あなたはあなた自身です。スレッドを生成すると、Androidオペレーティングシステムに翻弄され、完了したらスレッドを終了できます。

補足:私は以前にこのような問題に遭遇しました。これは通常、システムサービスへの呼び出し、またはブロードキャストリスナーまたはアラームの実装が終了プロセスを台無しにします。

于 2012-07-25T04:43:08.447 に答える
0
private Runnable runnable = new Runnable() {
    private boolean killMe=false;
    public void run() {
        //some work
        if(!killMe) {

            img.setImageBitmap(returnBitmap("fromurl"));
            handler.postDelayed(this, 50);
        }
    }
    public void kill(){
        killMe=true;
    }
};

ThreadPoolExecutor threadPoolExecutor = Executors.newSingleThreadExecutor();
Runnable longRunningTask = new Runnable();

// submit task to threadpool:
Future longRunningTaskFurure = threadPoolExecutor.submit(longRunningTask);

... ...
// At some point in the future, if you want to kill the task:
longRunningTaskFuture.cancel(true);
... ...
于 2012-07-25T03:36:29.717 に答える