当前位置: 首页 > news >正文

政府网站标准创新驱动发展战略

政府网站标准,创新驱动发展战略,净化工程 技术支持 东莞网站建设,网站开发劳动合同范本mvc MVC 架构中,Activity/Fragment(作为 View 和 Controller)直接持有 Model 或异步任务的引用,当页面销毁时,这些长生命周期对象若未正确释放,会导致 Activity 无法被 GC 回收,形成内存泄漏。…

mvc

MVC 架构中,Activity/Fragment(作为 View 和 Controller)直接持有 Model 或异步任务的引用,当页面销毁时,这些长生命周期对象若未正确释放,会导致 Activity 无法被 GC 回收,形成内存泄漏。

举例:

在activity中创建一个线程执行下载任务,该线程为内部类会持有activity类的强引用,如果下载过程中,用户关闭下载页面,该activity销毁但是下载任务未结束,该activity无法回收

// MVC模式下的Activity(同时作为View和Controller)
public class HomeActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_home);// 错误示例:AsyncTask内部类隐式持有Activity引用new DownloadTask().execute("url");}// 内部类会隐式持有外部类(Activity)的强引用private class DownloadTask extends AsyncTask<String, Void, byte[]> {@Overrideprotected byte[] doInBackground(String... params) {// 网络请求,耗时操作return downloadData(params[0]);}@Overrideprotected void onPostExecute(byte[] result) {// 更新UI(View层操作)TextView textView = findViewById(R.id.result_text);textView.setText("下载完成");}}// 页面销毁时,若AsyncTask未完成,Activity无法被回收@Overrideprotected void onDestroy() {super.onDestroy();// 未取消任务,泄漏风险}
}

mvp

**对比mvc:

把原来的UI逻辑抽象成View接口,把原来的业务逻辑抽象成Presenter接口,model还是原来的model

基本业务逻辑示例

在这里插入图片描述

示例

view: 定义展示的方法,依赖具体的activity实现

//顶层接口
public interface IBaseVeiw {void showErrorMesage(String msg);
}public interface IGoodsView extends IBaseVeiw{void showGoodView(List<Goods> goods);
}

model:存储和获取数据的逻辑,与view没有直接联系

//顶层接口
public interface IGoodsModel {void loadGoodsData(OnLoadlistener onLoadListener);interface OnLoadlistener{void onComplete(List<Goods> goods);void onError(String msg);}
}//业务相关具体实现类
public class GoodsModel implements IGoodsModel{@Overridepublic void loadGoodsData(OnLoadlistener onLoadListener) {onLoadListener.onComplete(getData());}//数据应来自真实情况(网络,数据库..  )private List<Goods> getData() {ArrayList data = new ArrayList<>();for(int i=0;i<10;i++){data.add(new Goods("商品"+i,i));}return data;}}

presenter:获取view和model,将model的获取的数据用view的方法显示

在presenter中创建view的弱引用,并创建对应的绑定解绑方法在activity的生命周期调用进行绑定和解绑

public class GoodsPresenter<T extends IBaseVeiw>  {//IGoodsView iGoodsView;public WeakReference<T> iGoodsView;IGoodsModel iGoodsModel = new GoodsModel();/*绑定*/public void attachView(T view){iGoodsView = new WeakReference<>(view);}/*解除绑定*/public void deatchView(){if(iGoodsView!=null){iGoodsView.clear();iGoodsView = null;}}public void  fetch(){if(iGoodsView.get()!=null&&iGoodsModel!=null){iGoodsModel.loadGoodsData(new IGoodsModel.OnLoadlistener() {@Overridepublic void onComplete(List<Goods> goods) {((IGoodsView)iGoodsView.get()).showGoodView(goods);}@Overridepublic void onError(String msg) {}});}}
}

在activity中使用presenter,只关心两件事,数据从哪里来,表示层选择什么

public class MainActivity extends AppCompatActivity implements IGoodsView {private ActivityMainBinding binding;private MainAdapter mainAdapter;private GoodsPresenter goodsPresenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());mainAdapter = new MainAdapter(R.layout.item_book);goodsPresenter = new GoodsPresenter();//使用弱引用goodsPresenter.attachView(this);goodsPresenter.fetch();}@Overridepublic void showErrorMesage(String msg) {}@Overridepublic void showGoodView(List<Goods> goods) {mainAdapter.setNewInstance(goods);binding.rec.setAdapter(mainAdapter);}@Overrideprotected void onDestroy() {super.onDestroy();goodsPresenter.deatchView();}
}
http://www.mmbaike.com/news/85823.html

相关文章:

  • 有前景的长沙企业网站建设百度不让访问危险网站怎么办
  • 嘉祥网站建设公司专门制作小程序的公司
  • 外贸网站建设上海百度模拟搜索点击软件
  • 怎样建立网站视频教程app运营推广是干什么
  • 配置网站开发环境域名解析
  • 自己做的网站能上传吗深圳博惠seo
  • 如何下载ppt模板免费下载网站seo哪家好
  • 网站企划设计公司福州百度推广排名优化
  • 昆山市建设局网站6百度营销登录
  • 提升自己建设自己的网站网站优化排名哪家性价比高
  • wordpress wordseo快速排名软件推荐
  • 酒店网站如何做北京百度推广客服电话多少
  • 《30天网站建设实录》seo综合查询工具下载
  • dreamweaver网站模板百度推广开户需要多少钱
  • 嵌入式应用软件开发流程seo专员是什么意思
  • 上海动易 网站电商线上推广渠道
  • 开发一个直播平台需要多少钱湖南靠谱seo优化公司
  • 做电影网站 广告收入推广公众号
  • 国外做游戏的视频网站松松软文平台
  • 网站asp木马删除网上企业推广
  • 电商网站前端设计方案百度首页快速排名系统
  • 苏州建设培训中心网站看颜色应该搜索哪些词汇
  • 怎样优化排名自己网站seo关键词排名优化系统
  • 网投网站建设百度竞价排名又叫什么
  • 娄底网站建设方案百度网站电话是多少
  • 做品牌网站怎么样百度关键词优化平台
  • 网站建设美工招聘百度竞价关键词价格查询
  • 怎么筛选一家做网站做的好的公司网络营销案例成功案例
  • 沈阳个人做网站广东东莞疫情最新消息
  • 网站建设论文的中期报告营销方法有哪几种