0

我有一个教程应用程序,它加载教程页面列表[它们是网页]。这些页面占据全屏,为菜单栏留下大约 100dp。虽然不能按原样分享源代码,但下面是教程活动的伪代码。

HashMap<Integer, customWebView > mapPage;
onCreate(){
    updateScreen();
}


updateScreen(){
    Instantiate CustomScrollView(Customized HorizontalScrollView);
    Instantiate scrollViewChildHolder (LinearLayout with horizontal orientation);
    Instantiate mapPage;
        for  index : total page size{
            Instantiate pageHolder(RelativeLayout);
            Instantiate customWebView (Custom WebView);//Takes orientation as one of argument
            Set  html page url;//customWebView has a method loadWebPage() which loads this url.
            Add customWebView  to pageHoler;
            mapPage.put(index, customWebView);
            Add pageHolder to  scrollViewChildHolder;
        }
    //pageNo which will be safely fetched from saved state. So it will be 1 on first start 
    //and on orientation change retains current reading page.
    onPageChange(pageNo);
}

//Custom callback on page swipe by user
@Override
onPageChange(int  pageNo){
    //Custom method which loads html page from url which was set in updateScreen() 
    mapPage.get(pageNo).loadWebPage();
    //unloadNeighbouring pages
    //Will  pick pageNo+2 & pageNo-2 pages and clears their content.
    unloadNeighbouringPagesTo(pageNo);
}

PS:

  1. 我必须在 WebView 上添加一些按钮,因此我们使用 RelativeLayout 作为页面包装器。

  2. 我不能选择适配器[PagerAdapter for ViewPager],因为它会导致 webview 在加载时突然闪烁其内容,这是我们负担不起的。所以 CustomHorizo​​ntalSrollView 对我们来说是必须的。

  3. 我将在滚动视图中添加大约 150 多个页面。

  4. 对于横向和纵向模式,我分别有不同的页面。因此我需要重新创建方向变化。每个屏幕方向的视图大小也不同。

  5. 我没有覆盖 onConfigurationChanged(..)。即在方向改变时,活动生命周期从新鲜开始。

问题:

更改方向时,加载页面内容需要 2-3 秒。此外,应用程序似乎很晚才检测到方向变化。

请建议我如何提高方向更改时快速加载的性能。

4

1 回答 1

0

您可以做一件事,创建一个包含横向和纵向设计的单一布局文件。并覆盖 OnConfigurationChange();

mnifest.xml

<activity
            android:name="YourActivity"
            android:configChanges="keyboardHidden|orientation|screenSize" // this will not refresh your activity
             />

@Override
    public void onConfigurationChanged(Configuration newConfig) {

        super.onConfigurationChanged(newConfig);

        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
            //visible landscape layout
            //hide portrait layout
        }else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            //visible portrait layout
            //hide landscape layout
        }
    }
于 2013-09-03T08:46:36.317 回答