当目前活动的火灾意图时,为什么要称呼两次



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

我有一个主屏幕,在滚动浏览中有大量数据,当我向下滚动并单击任何视频时,就会将意图发射到我以编程方式打开YouTube应用程序的另一个活动。

现在,问题是我从家庭活动开火的那一刻,到另一个具有YouTube App Logic播放YouTube视频的活动,视频开始在景观模式下播放。但是,当我完成YouTube应用程序时,我的主屏幕increate()再次被调用,因此我在主屏幕上失去了滚动的滚动位置。

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

您不应将这种行为混淆,因为这是普通的Android活动生命周期。您正在调用活动A的活动B。现在,从B回到A时,可能会有两种情况 -

1)由于缺乏内存,活动A被破坏了,需要再次创建它,因此再次调用ongreate()。

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]);
            }
        });
}

最新更新