代码之家  ›  专栏  ›  技术社区  ›  user1179510

破坏android中的Runnable

  •  1
  • user1179510  · 技术社区  · 12 年前

    我正在使用以下代码访问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);
    

    我观察到,如果服务器没有启动,如果我按下后退按钮,应用程序需要很长时间才能正确关闭。我有没有办法加快退出程序。

    2 回复  |  直到 12 年前
        1
  •  1
  •   rfinz    12 年前

    跑步者完成训练后将自动退出 run() 方法如果您正在使用一个循环来做一些工作,Jay Ho建议的解决方案将有助于干净地退出循环。如果你想阻止 Handler 通过执行可运行程序(在它发布之前),您可以使用 handler.removeCallbacksAndMessages(null) 1 以清除队列。将其放入 onDestroy() 是你最好的选择。否则,你只能靠自己了。一旦你生成了一个线程,你就可以任由安卓操作系统在完成后终止它。

    附带说明:我以前遇到过这样的问题,通常是对系统服务的调用或广播侦听器或警报的实现会破坏退出过程。

        2
  •  0
  •   Faizal    12 年前
    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);
    ... ...