zoukankan      html  css  js  c++  java
  • android切换卡顿解决方法

    如果想要让应用用户流畅的滑动体验的话,那么就必须对activity和fragment的生命周期有一个完整的概念以及在何种情况下会触发哪些事件。

    在自己目前做的项目中,就遇到了这样的问题,那么就把自己的解决方法罗列,重点在于onpause,onstop,onstart,onresume的事件处理。

    某些耗时的操作延迟加载,先展示总体页面。

    当对某些复杂的页面进行切换时,先隐藏后显示,如果不是特别卡顿不需要隐藏,如果卡顿严重的话强烈推荐隐藏,提升用户体验。

    代码如下:

    package com.hengtiansoft.mecb.fragment;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ListView;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.Toast;
    import android.widget.RadioGroup.OnCheckedChangeListener;
    
    import com.hengtiansoft.mecb.R;
    import com.hengtiansoft.mecb.adapter.FragmentTabPagerAdapter;
    import com.hengtiansoft.mecb.adapter.ProductOnSaleAdapter;
    import com.hengtiansoft.mecb.model.MenuProductOnSaleModel;
    import com.viewpagerindicator.UnderlinePageIndicator;
    
    public class MenuProductFragment extends BaseFragment{
        
        private ViewPager mVpProductPage;
        private FragmentTabPagerAdapter mTabPagerProductAdapter;
        private List<BaseFragment> mProductTabFragment;
        
        private RadioGroup mRgProductTab;
        private RadioButton mRbOnSale;
        private RadioButton mRbForSale;
        private RadioButton mRbOffSale;
        
        private UnderlinePageIndicator mIndicator;
        private View mView;
        
        //流畅显示切换所用的线程
        private Handler handler = new Handler();
        
        
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            mView = inflater.inflate(R.layout.fragment_menu_product, container, false);
            initView(mView);
            
            return mView;
        }
        
        @Override
        public void onStart() {
            super.onStart();
            handler.postDelayed(new Runnable() {
                public void run() {
                    setData(mView);
                }
            }, 200);
            setListener(mView);
        }
        
        
    
        @Override
        public void onResume() {
            super.onResume();
            handler.postDelayed(new Runnable() {
                public void run() {
                    mVpProductPage.setVisibility(View.VISIBLE);
                }
            }, 0);
        }
    
        @Override
        public void onPause() {
            super.onPause();
            handler.postDelayed(new Runnable() {
                public void run() {
                    mVpProductPage.setVisibility(View.INVISIBLE);
                }
            }, 100);
        }
        
        private void initView(View view) {
            mVpProductPage = (ViewPager)view.findViewById(R.id.vp_product_page);
            mIndicator = (UnderlinePageIndicator)view.findViewById(R.id.indicator_product_sort);
            mRgProductTab = (RadioGroup) view.findViewById(R.id.rg_product_tab);
            mRbOnSale = (RadioButton)view.findViewById(R.id.rb_product_onsale);
            mRbOffSale = (RadioButton)view.findViewById(R.id.rb_product_offsale);
            mRbForSale = (RadioButton)view.findViewById(R.id.rb_product_forsale);
        }
        
        private void setData(View view) {
            mProductTabFragment = new ArrayList<BaseFragment>();
            mProductTabFragment.add(new ProductOnSaleFragment());
            mProductTabFragment.add(new ProductForSaleFragment());
            mProductTabFragment.add(new ProductOffSaleFragment());
            
            mTabPagerProductAdapter = new FragmentTabPagerAdapter(mProductTabFragment,
                    getChildFragmentManager());
            mVpProductPage.setAdapter(mTabPagerProductAdapter);
            mVpProductPage.setOffscreenPageLimit(2);
            mIndicator.setViewPager(mVpProductPage);
            mIndicator.setFades(false);
        }
        
        private void setListener(View view) {
            mRgProductTab.setOnCheckedChangeListener(new OnCheckedChangeListener(){
    
                @Override
                public void onCheckedChanged(RadioGroup arg0, int checkedId) {
                    if(checkedId == mRbOnSale.getId()){
                        mVpProductPage.setCurrentItem(0,false);
                    }else if(checkedId == mRbForSale.getId()){
                        mVpProductPage.setCurrentItem(1,false);
                    }else{
                        mVpProductPage.setCurrentItem(2,false);
                    }
                }
            });
            
            mIndicator.setOnPageChangeListener(new OnPageChangeListener(){
    
                @Override
                public void onPageScrollStateChanged(int position) {
                }
                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {
                }
                @Override
                public void onPageSelected(int position) {
                    switch(position){
                    case 0:
                        mRbOnSale.setChecked(true);
                        break;
                    case 1:
                        mRbForSale.setChecked(true);
                        break;
                    case 2:
                        mRbOffSale.setChecked(true);
                        break;
                    default:
                        break;
                    }
                }
            });
            
            
            
        }
    
    }
  • 相关阅读:
    Springboot整合Dubbo
    网站appache的ab命令压力测试性能
    静态页面框架
    CSS布局设计
    弹性盒子的总结
    弹性盒子
    应用媒介查询制作响应式导航栏
    响应式的设计需要遵守的4个原则和媒介查询语句
    media type的类型汇总
    background-orgin属性
  • 原文地址:https://www.cnblogs.com/yukino/p/4482323.html
Copyright © 2011-2022 走看看