按名称获取活动实例(如果正在运行)

时间:2017-02-03 01:29:56

标签: java android

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对象中的所有活动一起使用,但这绝对是潜在问题的肮脏方式);

1 个答案:

答案 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