当前位置: 代码迷 >> Android >> 求教~新人理解 Handler 异步 时的有关问题
  详细解决方案

求教~新人理解 Handler 异步 时的有关问题

热度:240   发布时间:2016-05-01 11:34:54.0
求教~~~新人理解 Handler 异步 时的问题?
话说Handler是为了使进程与UI进程异步运行而设立的,
那么下面这段代码
Runnable里直接运行一个带休息时间的死循环
为什么会导致UI进程的卡死?

public class MainActivity extends Activity {
Button myButton1;
Button myButton2;
Handler handler;
Runnable myRunnable;
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton1=(Button)findViewById(R.id.Button1);
myButton2=(Button)findViewById(R.id.Button2);
handler=new Handler();
myRunnable =new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
  int i=0;
  while(true)
  {
      System.out.println("线程编号:"+i);

      try {
       Thread.sleep(2000);
      } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
      }
  }
}
};
myButton1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handler.post(myRunnable);
}
});
myButton2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handler.removeCallbacks(myRunnable);
}
});
}
}

难道必须在run里有一个handler.postDelayed(myRunnable, 2000);?
那么Runnable还怎么能起到连续做复杂操作,而不影响UI进程的作用?


我知道一定是我的理解有问题,求指点……
handler android 安卓 进程 异步

------解决方案--------------------
那是你还没弄明白Handler,Handler构建时可以指定的它的looper,默认使用主线程的消息对列。
想不阻塞,获取一个HandlerThread的looper即可
  相关解决方案