线程间通讯的问题

warcraftmgq warcraftmgq 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
现在需要封装一个类来处理底层数据,类中开启一个线程来持续采集数据,待数据满足某种条件(比如数据长度等)时通过Listener来通知调用者,但是调用者在响应时如果涉及到UI则会报错,应如何解决?
类代码:

public class MyClass {
private MyThread mThread = null;
private boolean isRunning = false;
private OnChangeListener listener = null;
private boolean flag = false;

private class MyThread extends Thread {
@Override
public void run() {
super.run();
while (isRunning && !isInterrupted()) {
if (flag) {
listener.onChanged();
flag = false;
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
break;
}
}
}
}

public interface OnChangeListener {
public void onChanged();
}

public void setMyListender(OnChangeListener l) {
listener = l;
}

public void start() {
if (null == mThread) {
mThread = new MyThread();
isRunning = true;
mThread.start();
}
}

public void flag() {
flag = true;
}
}


Activity代码

public class MainActivity extends Activity {
private MyClass mc = null;

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

mc = new MyClass();
mc.setMyListender(new MyClass.OnChangeListener() {
@Override
public void onChanged() {
//这里如果涉及到UI相关的操作则报错
}
});
mc.start();
}
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
warcraftmgq
Android 80,490 成员 91,375 内容