Android常见问题集锦

1、调用webview的页面应及时销毁,防止内存泄漏(具体如下):

@Override
    protected void onDestroy() {
        try {
            if( webView!=null) {
                ViewParent parent = webView.getParent();
                if (parent != null) {
                    ((ViewGroup) parent).removeView(webView);
                }
                webView.stopLoading();
                // 退出时调用此方法,移除绑定的服务,否则某些特定系统会报错
                webView.getSettings().setJavaScriptEnabled(false);
                webView.clearHistory();
                webView.clearView();
                webView.removeAllViews();
                webView.destroy();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        super.onDestroy();
    }

2、scrollView设置android:fillViewport="true",使scrollview的子控件能够充满屏幕。

3、viewpager中的fragment的一些设置技巧

public class FragmentInViewPager extends Fragment {
    private Object netData;
    private boolean isCreated = false;
 
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        if (!isVisibleToUser && isCreated) {
            //从该界面中离开的一些操作
        }
        super.setUserVisibleHint(isVisibleToUser);
    }
 
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (netData == null) {
            //请求网络获取数据
        } else {
            setData(netData);
        }
        isCreated = true;
        return super.onCreateView(inflater, container, savedInstanceState);
    }
 
    private void setData(Object netData) {
        //UI数据设置
    }
 
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        isCreated = false;
    }
}

4、scrollview包含recycleview的一些常见问题解决方案(注意使用NestedScrollView代替scrollview)

recyclerView.setLayoutManager(new LinearLayoutManager(this){
      @Override
      public boolean canScrollVertically() {
         //解决ScrollView里存在多个RecyclerView时滑动卡顿的问题
         //如果你的RecyclerView是水平滑动的话可以重写canScrollHorizontally方法
         return false;
      }
});
//解决数据加载不完的问题
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setHasFixedSize(true);
//解决数据加载完成后, 没有停留在顶部的问题
recyclerView.setFocusable(false);

5、recyclerview的上拉加载更多推荐使用以下方式

recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if (newState == RecyclerView.SCROLL_STATE_IDLE
                        && !recyclerView.canScrollVertically(1)
                        && !isLoading) {
                    isLoading = true;
                    //上拉加载更多操作
                    //...
                } else if (newState == RecyclerView.SCROLL_STATE_IDLE
                        && !recyclerView.canScrollVertically(-1)
                        && !isLoading) {
                    isLoading = true;
                    //下拉刷新操作,也可以使用SwipeRefreshLayout提供的下拉刷新
                    //...
                }
            }
        });

如果不满一屏无需上拉加载更多推荐使用以下方式

recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if (newState == RecyclerView.SCROLL_STATE_IDLE
                        && recyclerView.canScrollVertically(-1) 
                        && !recyclerView.canScrollVertically(1)
                        && !isLoading) {
                    isLoading = true;
                    //上拉加载更多操作
                    //...
                }
            }
        });

6、进行了某个操作想退出应用,可以使用这样的技巧

//回到桌面
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);

你可能感兴趣的:(Android常见问题集锦)