如何获得当前活动的活动?

时间:2011-04-20 23:46:57

标签: android android-activity

我的应用有几项活动。我需要确定它们中哪一个当前处于活动状态(或者无论术语是什么,活动,前景,显示......)。有没有办法做到这一点?

(我认为这是一个简单而常用的东西,但在搜索了一半和一小时之后,我什么也没得到。: - (

(RunningTaskInfo.topActivity()只返回ComponentName,但我需要它的引用,所以这没有帮助。)

(一种强力解决方案是在全局变量中跟踪活动的引用。但这必须在每个onResume()中完成。这是丑陋的IMO。)

3 个答案:

答案 0 :(得分:0)

  

有办法做到这一点吗?

不是。

  

(一种强力解决方案是在全局变量中跟踪活动的引用。但这必须在每个onResume()中完成。这是丑陋的IMO。)

这也是内存泄漏的一种方法。

就个人而言,我会找到一种更好的方法来解决您认为自己正在通过“当前激活[原创]活动”解决的任何问题。

答案 1 :(得分:0)

我不是一个专家,但我需要像你一样提到保持当前突出显示的按钮突出显示(底栏)。我想我在每个活动中都使用onResume()来提及将它存储在应用程序类变量中。我确信有更好的方法

编辑:实际上我只是重新阅读你提出的建议...是的我同意commonsware存储实际的活动参考是不好的。为什么不能只存储当前活动名称的字符串变量?这就是我所做的跟踪并突出显示一个合适的按钮

答案 2 :(得分:0)

无论遇到这个问题,即您需要参考当前的活动活动,这里都没有真正的解决方案。唯一的方法是你自己使用全局跟踪它。是的,使用全局实际上并不是Android编程的最佳方式,但我认为它的成本更低。

这是我做的:

扩展我在同一基础活动中的所有活动:MotherOfAllActivities。

public class MotherOfAllActivities extends Activity {
    public void onCreate(...) {
        globalCurrentActivity = this;
        ........
    }

    public void onResume() {
        globalCurrentActivity = this;
        ........
    }

    public void onPause() {
        if (globalCurrentActivity == this)
            globalCurrentActivity = null;
    }

    // And, don't forget about onActivityResult(). It can come before onResume()
    // of the calling activity and after onPause() of the called activity. That is,
    // there is a window when globalCurrentActivity is null.
    public void onActivityResult() {
        globalCurrentActivity = this;
    }
}

如果你不喜欢这个答案,请不要开枪。我只想与人们分享对我有用的东西,至少到目前为止。