我正在尝试在屏幕上显示进度条的屏幕(例如活动 A)上工作,并且我需要在进度条运行时将广播发送到不同的活动(活动 B)broadcastReceiver。如果活动 B 中的功能完成,它将显示回活动 A。
现在我在这样的工作线程中运行进度条并使用处理程序(Looper.getMainLooper())发送本地广播:
final Context context = Activity.this.getApplicationContext();
new Thread(new Runnable() {
@Override
public void run() {
while (progressBar.getProgress() != 100) {
try {
progressBar.incrementProgressBy(2);
Thread.currentThread().sleep(100);
} catch (InterruptedException ie) {
Log.e(LOG_TAG, "Interrupted exception in progress bar: " + ie);
}
if (progressBar.getProgress() == 10) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
// model is a parameter which I want to send using intents
Intent intent = new Intent("new_device");
intent.putExtra("device", model);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
});
}
}
}
}).start();
但它不起作用。其他活动未接收到广播。我知道广播应该在 UI 线程上完成,如果我在 onResume() 或 onCreate() 方法中完成它工作正常。但是当我在线程内的处理程序中使用它时(在 onCreate() 内)它不起作用。
我做错了什么还是有其他方法可以做到这一点?
编辑
我在活动 B 中收到我的意图,如下所示:
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Model model = (Model) intent.getSerializableExtra("device");
onConnectDevice(model.getDevice());
}
};