在当前前景活动

时间:2018-06-18 10:25:31

标签: java android back-stack

我正在尝试在我的应用程序中创建一个“自动刷新”功能 - 所以如果一个活动或片段在后台运行超过两分钟,它将在进入前台时自动从api获取新数据。

但是我有一个案例,其中活动A中的片段A,api调用并在列表中显示数据。单击特定列表元素时,输入活动B,其中显示更多信息。

问题是 - 当活动B在后台进入至少两分钟后进入前景时,而不是对特定的听众进行api调用 - 我宁愿只获取整个列表(它是动态的,通常很短并且理想地使用我用于片段A中的初始提取的相同代码。

是否可以从片段A中的活动B调用方法?我该怎么做?然后我如何将数据传回活动B,以更新那里的UI?

所以我的堆栈看起来像:

  

活动B(前景)

     
    

活动A中的片段A

  

我想调用活动B中片段A中的方法 - 并在http请求响应时向活动B报告。

提前致谢,如果有任何我需要详细说明,请告诉我。

3 个答案:

答案 0 :(得分:0)

您可以使用

template <std::size_t... Is>
void callGImpl(std::index_sequence<Is...>)
{
    g(f(Is)...);
}

template<int N> 
void callG()
{
    callGImpl(std::make_index_sequence<N>{});
}

答案 1 :(得分:0)

您可以尝试以下解决方案:

在活动A&amp;中的片段A中编写一个公共静态方法。从活动B =&gt;中调用它但是当你在活动B中时,处理显示结果的方法的输出很重要 对于共享数据,您可以使用SharedPreferences,本地存储或静态变量。

答案 2 :(得分:0)

无需在活动B中调用活动A-&gt;片段A的方法,只需在两秒钟后刷新数据。 您可以在片段A或活动A的onPause方法中启动一个线程(根据您的需要)。稍后在onResume中停止该线程。

//field
private Handler handler;
private Runnable runnable;

private void getDataFromNetwork(){
   handler = new Handler();
   runnable = new Runnable() {
     @Override
     public void run() {
        //Do something after 2000ms

       //call this method to again schedule this thread after 2000ms.
       handler.postDelayed(this, 2000);
   }
 };

   handler.postDelayed(runnable, 2000);
}
onResume中的

只删除此方法的回调。

handler.removeCallbacks(runnable);

但是使用这种方法时总是记得从处理程序中删除回调,否则它将成为悬空线程并导致内存泄漏。