如何获取对新创建的Android活动的引用

时间:2016-08-19 22:35:23

标签: android android-activity

在我的Android应用中,我的主要活动创建了ActivityB,但是我需要获得对该Activity的引用,以便稍后我可以在其上引发一个事件。我想做点什么:

var intent = new Intent(this, typeof(ActivityB));
intent.PutExtra("Param1", "Some Value");
ActivityB activityB = StartActivityForResult(intent, RATING_REQUEST_CODE);
.
.
.
activityB.SomeEvent();

但当然,这不起作用,因为StartActivityForResult返回void,而不是Activity。

如何获得对刚刚使用StartActivityForResult创建的活动的引用?

3 个答案:

答案 0 :(得分:4)

  

我需要获得对该Activity的引用,以便稍后可以在其上引发一个事件

这不是你在Android中的表现。组件松散耦合;活动不会持有其他活动。 Android在许多场景中销毁并重新创建活动(旋转屏幕,其他配置更改,进程终止和重新启动)。从一项活动到另一项活动的参考将变得过时。

常见的方法是使用事件总线such as LocalBroadcastManagergreenrobot's EventBus。让活动B订阅公交车上的活动,并将活动A发布活动发送到公交车。

答案 1 :(得分:1)

其他答案已经涵盖了你应该做的事情,但是解释一下你的问题有什么问题可能会有所帮助。

  

如何获得对刚刚使用StartActivityForResult创建的活动的引用?

调用startActivityForResult不会创建活动!可以把它想象成要求Android框架很快为你创建活动。当此方法返回时,活动B尚不存在。当框架创建了活动B时,活动A将处于非活动状态,并可能很快就会停止存在。 (实际上,除非打开“不要保持活动”开发人员选项,否则活动A不会被完全销毁。但这是一个可能在未来的Android版本中发生变化的实现细节。文档说活动A可能被破坏,所以活动B永远不应该依赖现有的活动。)

答案 2 :(得分:0)

Android并没有这样做(至少据我所知)。通过Intent完成通讯。在这种情况下,您需要覆盖当您完成拍照时调用的onActivityResult方法。

以下是一个例子:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // the request type
    if (requestCode == TAKE_PICTURE) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
             //intent has the path to the picture that was taken

        }
    }
}

编辑:

框架和运行时为您处理大部分Activity生命周期。保留对Activity的引用可能不是一个好主意,因为你从未(至少据我所知)可能是垃圾收集