检测当前前台活动并重新加载它
Posted
技术标签:
【中文标题】检测当前前台活动并重新加载它【英文标题】:Detect current foreground Activity and reload it 【发布时间】:2017-05-18 22:52:03 【问题描述】:我的问题: 在 MainActivity 中,我开始通过 XML Parser 从 Internet 下载一些数据。此数据显示在我的应用程序的每个屏幕上。它就像一个数据库。
在下载和保存数据的同时,应用程序的用户可以在洞应用程序中导航。如果下载和保存数据完成,我要检测并重新加载当前前台Activity。我需要这样做,以显示新数据。
我可以使用 ActivityManager 检测当前 Activity,并可以使用“startActivity(Intent.makeMainActivity(componentName)”方法从 ComponentName 启动它。但是当我使用 ActionBar-BackButton 导航返回时,旧的 Activity 也在那里. 下载数据后,我在 AsyncTasks onPostExecute-Method 中执行此操作。
任何想法如何做到这一点?
protected void onPostExecute(MainActivity.UrlParams result)
Toast.makeText(result.contextMain, "Daten wurden erfolgreich aktualisiert!", Toast.LENGTH_LONG).show();
//Aktualisiert aktive Activity damit die neuen Daten angezeigt werden!
ActivityManager am = (ActivityManager) result.contextMain.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
Log.d("topActivity", "CURRENT Activity ::" + taskInfo.get(0).topActivity.getClassName());
ComponentName componentInfo = taskInfo.get(0).topActivity;
componentInfo.getPackageName();
Intent intent = Intent.makeMainActivity(componentInfo);
result.contextMain.startActivity(intent);
//myApp.getCurrentActivity().set
【问题讨论】:
【参考方案1】:-
下载您的数据是服务,而不是在 AsyncTask 中
在
MainActivity
中注册一些BroadcastReceiver
onStart()
,并在onStop()
中取消注册。在此接收器中刷新您的视图
下载数据后,进行广播以调用活动,该数据已准备就绪。
这种方法的缺点是您应该将数据保存在某处。您当然可以在意图中传递数据,但前提是数据很小
【讨论】:
有一个名为EventBus
的库可以为您执行此操作,非常棒。如果您不想使用该库,Tomasz 建议是最好的方法。
谢谢,但有更简单的方法吗?
正如 danypata 提到的,您可以使用 EventBus
库。我认为这是最简单,很好的方法,没有任何黑客和模糊代码
我读了一点“入门”和“模式”,我认为 ASYNK 模式适合我。我希望它像看起来一样易于使用
@danypata 我创建了 MessageEvent 类在 onPostExecute 我发布了 eventMessage “重新加载”,并在我在 onStart / onStop 中注册和取消注册的活动中,但方法 onEventAsync 没有被调用......我必须做什么做什么?以上是关于检测当前前台活动并重新加载它的主要内容,如果未能解决你的问题,请参考以下文章
页面重新加载后,如何使用 twitter bootstrap 保持当前选项卡处于活动状态?