在android中销毁Runnable

时间:2012-07-25 03:26:08

标签: android runnable android-handler

我使用以下代码访问网址:

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

handler.postDelayed(runnable, 2000);

我观察到,如果服务器未启动,则应用程序需要很长时间才能正确关闭,如果我按下后退按钮。无论如何,我可以加快退出程序。

2 个答案:

答案 0 :(得分:1)

使用run()方法完成后,Runnables将自动退出。如果你使用循环来做一些工作,Jay Ho建议的解决方案将有助于干净地退出循环。如果您想阻止Handler执行runnable(在发布之前),您可以使用handler.removeCallbacksAndMessages(null) 1清除队列。将其放在onDestroy()中是最好的选择。否则,你就是靠自己。一旦你产生了一个线程,你就会受到Android操作系统的支配,一旦完成它就会终止它。

旁注:我之前遇到过这样的问题,通常是调用系统服务或实现广播监听器或警报来破坏退出过程。

答案 1 :(得分: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);
... ...