android 线程ANR问题

左右的存在 发布于 2016/07/19 12:15
阅读 237
收藏 0
private void progressBarThread() {

Runnable runnable = new Runnable() {

@Override
public void run() {

while (true) {
mRoundProgressBarLI
.setProgress((int) (Math.random() * 100));
mRoundProgressBarLO
.setProgress((int) (Math.random() * 100));
String msgL = mRoundProgressBarLI.getProgress() + "%";

mRoundProgressBarRI
.setProgress((int) (Math.random() * 100));
mRoundProgressBarRO
.setProgress((int) (Math.random() * 100));
String msgR = mRoundProgressBarRI.getProgress() + "%";

Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("msgL", msgL);
bundle.putString("msgR", msgR);
message.setData(bundle);
handler.sendMessage(message);

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}
};

thread = new Thread(runnable);
}

这是一个方法,创建了一个线程


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

init();
progressBarThread();
onclick();
listinit();
}

在onCreate方法里面调用了这个方法

if(flag == -1) {
thread.start();
flag = 0;
}

开始按钮的点击事件里面开始这个线程

一直到这里都没有问题

以下就是问题了:
if(flag == 0) {
synchronized (thread) {
try {
thread.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
flag = 1;
}

在暂停按钮使用wait方法时,主线程step了,导致程序未响应。
为什么会这样?
求解决方法。
因为要实现实时更新,所以新建不了新的类
加载中
0
nesger
nesger
可能你需要换个逻辑吧。为什么要调用wait呢?你主要要实现的功能是什么呢?你在主线程wait,肯定就会导致ANR啊。
0
左右的存在
调用wait是希望实现暂停功能,其实界面上有三个按钮分别是 开始 暂停 结束 ,所以我希望暂停能使界面中的roundprogressbar暂停
nesger
nesger
用Thread+Handler吧。这样逻辑更清楚些。而且也能实现你要的功能。
返回顶部
顶部