为什么onCreate在当前Activity的fire intent中被调用两次?

时间:2017-03-07 08:03:08

标签: android android-scrollview android-orientation

我正在制作一个模块,我需要在YouTube应用中打开YouTube视频。

我有一个主屏幕,滚动视图中有大量数据可用,当我向下滚动并点击任何视频时,意图被激发到我以编程方式打开YouTube应用程序的另一个活动。

现在的问题是,当我将家庭活动的意图发送到另一个具有YouTube应用逻辑来播放YouTube视频的活动时,视频开始以横向模式播放。但是当我完成YouTube应用程序时,我的主屏幕oncreate()再次被调用,因此我在主屏幕中丢失了我的滚动视图的滚动位置。

当onCreate被调用两次时如何处理这种情况?如何在主屏幕中保留scrollview的滚动位置?

1 个答案:

答案 0 :(得分:2)

您不应该对此行为感到困惑,因为这是正常的Android活动生命周期。您正在从活动A调用活动B.现在,当从B回到A时,可能有两种情况 -

1)由于内存不足而导致活动A被销毁,需要再次创建,因此再次调用onCreate()。

2)系统没有销毁活动A ,它仍在内存中。在这种情况下,将调用onResume()。

只有在活动被销毁时的第一种情况下,您才会失去位置。

您可以保存套装中的位置

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putIntArray("SCROLL_POSITION",
            new int[]{ mScrollView.getScrollX(), mScrollView.getScrollY()});
}

再次恢复,

protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    final int[] position = savedInstanceState.getIntArray("SCROLL_POSITION");
    if(position != null)
        mScrollView.post(new Runnable() {
            public void run() {
                mScrollView.scrollTo(position[0], position[1]);
            }
        });
}
相关问题