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问题吗?

3个回答

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

kuaiguixs
wang_android 第一种可以解决anr问题吗?
大约 3 年之前 回复

你的第二种根本就没启用线程,只是纯粹的调用了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();

jsu_9207
eumji 回复wang_android: 安卓我不太懂,不好意思
大约 3 年之前 回复
kuaiguixs
wang_android 我是做的安卓开发,耗时操作里有UI操作,不能开启线程执行。只能在主线程运行
大约 3 年之前 回复

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

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

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //更新ui
                    }
                });
            }
        }).start();
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问