<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      安卓筆記俠

      專注安卓開發(fā)

      導(dǎo)航

      MVP模式及性能優(yōu)化

       

      1.base

      BaseActivity

      public abstract class BaseActivity<V,P extends BasePresenter<V>>extends AppCompatActivity {
          protected P  mPresenter;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              mPresenter=createPresenter();
              mPresenter.attachView((V)this);
          }
      
          /**
           * activity/view會持有presenter層的引用,presenter會引用model層的引用。model加載的數(shù)據(jù)極有可能是網(wǎng)絡(luò)數(shù)據(jù),且極
           * 有可能是異步子線程加載的數(shù)據(jù)。加載這樣的數(shù)據(jù)要耗時,一旦用戶點(diǎn)擊回退推出了當(dāng)前的view,則view就被釋放了,
           * 但是當(dāng)model層加載數(shù)據(jù)完成后會回掉監(jiān)聽器,他會拿著view的引用去訪問一塊已經(jīng)被釋放了的view內(nèi)存。
           * 這樣是沒有必要的,是浪費(fèi)資源的,導(dǎo)致了內(nèi)存的泄漏。
           */
          @Override
          protected void onDestroy() {
              super.onDestroy();
              mPresenter.detachView();
          }
      
          public abstract P  createPresenter();
      }
      
      BasePresenter
      public abstract class BasePresenter<V> {
      
          protected WeakReference<V> mViewRef;//當(dāng)內(nèi)存不足時釋放內(nèi)存
          
          public void attachView(V view){
              mViewRef=new WeakReference<V>(view);
          }
      
          public void detachView(){
              if(mViewRef!=null){
                  mViewRef.clear();
                  mViewRef=null;
              }
          }
      
          protected V getView(){
              return mViewRef.get();
          }
      }
      

      2.Activity

      UserActivity

      public class UserActivity extends BaseActivity<UserView,UserPresenter> implements UserView{
          private ListView listview;
          private UserAdapter mAdapter;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              listview= (ListView) findViewById(R.id.list_view);
      
              //入口
              mPresenter.fetch();
          }
      
          @Override
          public UserPresenter createPresenter() {
              return new UserPresenter();
          }
      
          @Override
          public void showLoading() {
              Toast.makeText(getApplicationContext(),"正在加載...",Toast.LENGTH_LONG).show();
          }
      
          @Override
          public void showDatas(List<User> datas) {
              mAdapter=new UserAdapter(getApplicationContext(), datas);
              listview.setAdapter(mAdapter);
          }
      }
      

      3.view

      UserView

      public interface  UserView {
      
          void showLoading();
      
          void showDatas(List<User>  datas);
      }

      4.presenter  

      UserPresenter

      public class UserPresenter extends BasePresenter<UserView> {
      
          UserModel userModel=new UserModelImpl();
      
      
          public void fetch(){
              getView().showLoading();
              if(userModel!=null){
                  userModel.loadDatas(new UserModel.DataOnLoadingListener() {
                      @Override
                      public void onComplete(List<User> datas) {
                          getView().showDatas(datas);
                      }
                  });
              }
          }
      }
      

       

      5.model

      UserModel

      public interface  UserModel {
          void loadDatas(DataOnLoadingListener listener);
      
          interface DataOnLoadingListener{
              void onComplete(List<User> datas);
          }
      }
      
      UserModelImpl
      public class UserModelImpl implements  UserModel {
          @Override
          public void loadDatas(DataOnLoadingListener listener) {
              List<User> datas= DataUtil.getInstance().getData();
      
              listener.onComplete(datas);
          }
      }
      

      6.其他的無關(guān)的

      UserAdapter

      public class UserAdapter extends BaseAdapter {
          private Context context;
          private List<User> datas;
      
          public UserAdapter(Context context,List<User>datas){
              this.context=context;
              this.datas=datas;
          }
          @Override
          public int getCount() {
              return datas.size();
          }
      
          @Override
          public Object getItem(int position) {
              return datas.get(position);
          }
      
          @Override
          public long getItemId(int position) {
              return position;
          }
      
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
              if(convertView==null){
                  convertView=View.inflate(context, R.layout.item, null);
              }
              ViewHolder holder=ViewHolder.getHolder(convertView);
              holder.tv.setText(datas.get(position).getName());
              return convertView;
          }
      
          static class ViewHolder{
              TextView tv;
              public ViewHolder(View convertView){
                  tv=(TextView) convertView.findViewById(R.id.textView);
              }
      
              public static ViewHolder getHolder(View convertView){
                  ViewHolder holder=(ViewHolder) convertView.getTag();
                  if(holder==null){
                      holder = new ViewHolder(convertView);
                      convertView.setTag(holder);
                  }
                  return holder;
              }
          }
      
      }
      

        

      User

      public class User {
          private String name;
      
          public User(String name) {
              this.name = name;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      }
      

        

      DataUtil

      public class DataUtil {
          private static DataUtil dataUtil=null;
      
          public static DataUtil getInstance(){
              if(dataUtil==null){
                  dataUtil=new DataUtil();
              }
              return dataUtil;
          }
      
          public List<User> getData(){
              List<User> datas = new ArrayList<>();
              for (int i = 0; i < 20; i++) {
                  User user = new User("" + i);
                  datas.add(user);
              }
              return datas;
          }
      
      }
      

        

        

        

        

      https://blog.csdn.net/qq_26907251/article/details/65626087

      https://github.com/sunshinewei/ChildrenEduction

      posted on 2016-11-15 18:58  安卓筆記俠  閱讀(724)  評論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 久久精品成人免费看| 黄色三级亚洲男人的天堂| 久久国产成人av蜜臀| 亚洲国产av无码综合原创国产| 国产jizzjizz视频| 亚洲日韩一区二区| 欧美日韩精品一区二区在线观看| 国产福利社区一区二区| 久久天天躁狠狠躁夜夜躁2012| 久久精品夜色噜噜亚洲av| 97人妻精品一区二区三区 | 亚洲av综合久久成人网| 377P欧洲日本亚洲大胆| 亚洲AV日韩AV激情亚洲| 欧美一进一出抽搐大尺度视频| 国产在线午夜不卡精品影院| 葫芦岛市| 成人福利国产午夜AV免费不卡在线 | 亚洲精品一区二区制服| 国产91成人亚洲综合在线| 一本色道久久综合亚洲精品| 欧美粗大| 狠狠色狠狠色综合久久蜜芽| 久久综合97丁香色香蕉| 亚洲一区二区在线av| 亚洲伊人久久精品影院| 中国女人熟毛茸茸A毛片| 办公室强奷漂亮少妇视频| 无码人妻精品一区二区三区下载 | 日本中文字幕不卡在线一区二区| 日本一卡二卡3卡四卡网站精品| 沐川县| 老鸭窝在线视频| 国产精品久久久久影院色| 亚洲精品一区二区三区婷婷月| 亚洲人成网站18禁止无码| 国产精品嫩草99av在线| 国产高清在线男人的天堂| 综合色一色综合久久网| 国产精品有码在线观看| 国产精品中文字幕久久|