java线程问题——使用线程解决anr问题

以下两个方式效果一样吗?
1、
Hanlder handler = new Handler();
handler.post(new Runnable(){
public void run(){
//耗时操作
}
});

2、
final Runnable onCompleteRunnable = new Runnable() {
@Override
public void run() {
//耗时操作
}
};
onCompleteRunnable.run();
问题:我用第二种方法执行耗时操作,有时候会引起anr。第一种方法可以解决anr问题吗?

在android里面还是用第一种好。

你的第二种根本就没启用线程,只是纯粹的调用了run方法
启用以一个线程的步骤
1.实现runnable接口
2.创建thread对象
3.调用thread的start方法

Thread thread = new Thread(new runnable(){
            for (int i = 0; i < 5; i++) {
                System.out.println("我是"+Thread.currentThread().getName()+"线程的第"+i+"个数!!!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();

第一种handler消息机制可以,第二种如下,可以用runOnUiThread()执行UI操作

new Thread(new Runnable() {
            @Override
            public void run() {
                //do耗时操做

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //更新ui
                    }
                });
            }
        }).start();