检测当前前台活动并重新加载它

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 保持当前选项卡处于活动状态?

Next.js 在下一页的 getInitialProps 完成加载时保持当前页面处于活动状态并重新渲染

当活动从后台(暂停)到前台时重新创建 Android 活动

重新创建一个活动并传递参数

在不重新加载活动的情况下更新回收站视图中的内容

保存 Android MapView 并重新加载