; 建一个线程类,继承自Thread类,重写该类的runO方法,实现每隔2秒发送一务给UI线程。(7分) 小题得分 提示代码: try { }catch(InterruptedException e)f Log.e(TAG, e.toString(O));
时间: 2024-12-14 15:22:00 浏览: 4
Java线程的详细讲解
为了实现一个线程类,它每2秒向UI线程发送消息,我们可以创建一个名为`MessageSendingThread`的自定义线程类,继承自`Thread`。在这个类中,我们需要重写`run()`方法,并使用`Handler`或者`HandlerThread`来在主线程中更新UI。
首先,导入必要的包:
```java
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import java.lang.ref.WeakReference;
import java.util.concurrent.TimeUnit;
```
接下来,创建`MessageSendingThread`类:
```java
public class MessageSendingThread extends Thread {
private static final String TAG = "MessageSendingThread";
private WeakReference<MainActivity> activityRef; // 弱引用,避免内存泄露
private Handler mHandler; // 主线程的Handler
private long interval = 2000; // 每隔2秒
public MessageSendingThread(MainActivity mainActivity) {
this.activityRef = new WeakReference<>(mainActivity);
mHandler = new Handler(activityRef.get().getMainLooper()) { // 在主线程的Looper上创建Handler
@Override
public void handleMessage(Message msg) {
// 在这里处理发送的消息
MainActivity activity = activityRef.get(); // 获取活动实例
if (activity != null) {
// 发送消息到UI
activity.onMessageReceived(msg.obj); // 自定义方法,根据应用需求更新UI
} else {
Log.e(TAG, "Activity is no longer valid");
}
}
};
}
@Override
public void run() {
try {
while (true) {
// 模拟发送消息,这里可以替换为你实际的业务逻辑
Object messageData = generateMessageData(); // 生成消息数据
// 使用Handler发送消息,注意这里是在新线程中
mHandler.sendMessageDelayed(mHandler.obtainMessage(), interval, messageData);
// 等待一段时间
TimeUnit.SECONDS.sleep(interval / 1000);
}
} catch (InterruptedException e) {
Log.e(TAG, "Interrupted during sleep", e);
}
}
// 生成消息数据的方法,根据实际需求定制
protected Object generateMessageData() {
return "New message from background thread"; // 示例字符串
}
// 主线程中处理消息的方法,你需要在此处实现UI更新操作
public abstract void onMessageReceived(Object data);
}
```
现在,你在`MainActivity`中可以这样做来启动这个线程:
```java
public class MainActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 在合适的地方启动线程
MessageSendingThread thread = new MessageSendingThread(this);
thread.start();
}
// 实现onMessageReceived方法,以处理来自MessageSendingThread的消息
public void onMessageReceived(Object data) {
// 根据data的内容更新UI
// 示例:
TextView textView = findViewById(R.id.textView);
textView.setText(data.toString());
}
}
```
阅读全文