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

}
原文地址:https://www.cnblogs.com/yukino/p/4482323.html