A有一个长期运行任务的应用程序。任务对象安全地移出到Application对象。但是,我仍然需要更新UI。到目前为止,该任务实际上是长时间运行的,因此用户可以转到另一个活动,当前的活动可能会被销毁,但任务将继续有效。 现在,在任务完成后,我想更改活动的UI。但这可能是活动的新实例,或者活动可能被破坏。但如果它还活着(无论哪个实例)我想做出这个改变。这是我需要的伪代码:
MyActivity act = SomeActivityManager.get(MyActivity.class.name());
if(act == null) {
// the activity is destroyed, no action needed,
// on next creating all UI changes will be in place
} else {
act.drawRedLine(); // custom method of my activity
}
我更喜欢基于android-sdk的解决方案(我仍然可以使用WeakHashMap
与Application对象中的所有活动一起使用,但这绝对是潜在问题的肮脏方式);
答案 0 :(得分:0)
不确定这是否是最佳方式,但您可以使用由长期运行任务发送的Intent,例如
preload
并使用BroadcastReceiver在您的Activity中接收它,如下所示:
LocalBroadcastManager.getInstance(context).sendIntent(new Intent("DrawRedLine"));
在BroadcastReceiver br = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//update your activity
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(br, new IntentFilter("DrawRedLine"));
中以这种方式注册,并使用
onCreate
中取消注册
onDestroy