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

泰安网站建设策划方案世界工厂采购网下载

泰安网站建设策划方案,世界工厂采购网下载,互联网营销师培训内容,唐山市城市建设规划局网站时间是一只藏在黑暗中温柔的手#xff0c;在你一出神一恍惚之间#xff0c;物走星移 一#xff0c;定义 观察者模式是定义对象间一种一对多的依赖关系#xff0c;使得每当一个对象改变状态#xff0c;则所有依赖于它的对象都会得到通知并被自动更新 字面意思很好理解在你一出神一恍惚之间物走星移 一定义 观察者模式是定义对象间一种一对多的依赖关系使得每当一个对象改变状态则所有依赖于它的对象都会得到通知并被自动更新 字面意思很好理解我们常用的订阅-发布系统就是观察者模式。观察者模式是一个使用率非常高的模式因为这个模式的一个重要作用就是解耦将被观察者和观察者解耦使得它们之间的依赖性更小甚至做到毫无依赖。 二使用场景 1关联行为场景需要注意的是关联行为是可拆分的而不是组合关系 2事件多级触发场景 3跨系统的消息交互场景如消息队列事件总线的处理机制 观察者模式可以分为四个角色 1抽象主题也就是被观察的角色抽象主题角色把所有观察者对象的引用保存在一个集合里每个主题都可以有任意数量的观察者抽象主题提供一个接口可以增加和删除观察者对象。 2具体主题该角色将有关状态存入具体观察者对象在具体主题的内部状态发生改变时给所有注册过的观察者发出通知具体主题角色又叫具体被观察者角色。 3抽象观察者该角色是观察者的抽象类它定义了一个更新接口使得在得到主题的更改通知时更新自己。 4具体的观察者该角色实现抽象观察者角色所定义的更新接口以便在主题的状态发生变化时更新自身的状态。 三使用案例 在我们的开发中都会遇到下载升级的场景需要边下载边显示升级进度还需要在下载完成或者下载失败之后更新状态为正在安装或者下载失败可能有的应用需要显示进度的页面还不止一个这个时候使用观察者模式就再好不过了。 首先我们需要定义一个观察者抽象接口实现两个方法 /** 创建者: 袁震* 创建时间: 2023/7/25 10:37* 描述 观察者接口*/public interface DownLoadObserver {//下载状态发生变化public void onDownloadStateChanged(boolean isSuccess,String path);//下载进度发生变化public void onDownloadProgressChanged(int progress);} 然后实现一个下载管理器这个下载管理器实际上就是被观察者里面注册了观察者实现了下载功能并在下载进度和状态改变时通知观察者 /** 创建者: 袁震* 创建时间: 2023/7/25 10:34* 描述 下载管理器 被观察者*/ public class DownloadManager {private static final String TAG DownloadManager;private int errorCount 0;//下载失败次数// 私有的构造函数private DownloadManager() {}// 私有的静态内部类private static class Holder {private static DownloadManager instance new DownloadManager();}// 开放的获取单例对象的方法public static DownloadManager getInstance() {return DownloadManager.Holder.instance;}private ArrayListDownLoadObserver mObservers new ArrayListDownLoadObserver();//注册观察者public void registerObserver(DownLoadObserver observer){if(observer! null !mObservers.contains(observer)){Log.d(TAG,----添加observer);mObservers.add(observer);}}//注销观察者public void unregisterObserver(DownLoadObserver observer){if(observer! null mObservers.contains(observer)){mObservers.remove(observer);}}// 通知下载状态发生变化public synchronized void notifyDownloadStateChanged(boolean isSuccess,String path) {for (DownLoadObserver observer : mObservers) {observer.onDownloadStateChanged(isSuccess,path);}}// 通知下载进度发生变化public synchronized void notifyDownloadProgressChanged(int progress) {for (DownLoadObserver observer : mObservers) {observer.onDownloadProgressChanged(progress);}}public void downLoadApk(String fileUrl,String name){//调用线程池中的线程A10ThreadExecutor.getExecutorService(A10ThreadExecutor.HANDLE_MODULE).execute(() - {String rootDir /sdcard/Update_APK/;Log.d(TAG, 下载路径为 rootDir);Utils.delAllFile(rootDir);OmniHttp.downLoad(fileUrl).savePath(rootDir).saveName(name).execute(new DownloadProgressCallBackString() {Overridepublic void update(long bytesRead, long contentLength, boolean done) {notifyDownloadProgressChanged((int) ((bytesRead * 100)/contentLength));}Overridepublic void onStart() {}Overridepublic void onComplete(String path) {notifyDownloadStateChanged(true,path);Log.d(TAG, -------下载成功path path);}Overridepublic void onError(final ApiException e) {errorCount;errMethod(fileUrl,name,errorCount);Log.e(TAG, ----下载失败 e.getMessage()--失败次数errorCount);}});});}} 在实际使用中 /** 创建者: 袁震* 创建时间: 2023/7/24 14:14* 描述 升级页面*/ RequirePresenter(UpdatePresenter.class) public class UpdateActivity extends BaseActivityUpdatePresenter implements UpdateContract.IUpdateView, DownLoadObserver {private static final String TAG UpdateActivity;public static final String UPDATE_DATE UPDATE_DATE;private ProgressBar pb;private TextView txtProgress;private TextView txtContent;Overridepublic int getLayoutId() {return R.layout.activity_update;}Overridepublic void initFields() {pb findViewById(R.id.progressBar);txtProgress findViewById(R.id.txt_progress);txtContent findViewById(R.id.txt_content);//注册观察者DownloadManager.getInstance().registerObserver(this);}Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);String stringExtra getIntent().getStringExtra(UPDATE_DATE);bean GsonUtils.json2Bean(stringExtra, UpdatePackageBean.class);}Overridepublic void onDownloadStateChanged(boolean isSuccess,String path) {Log.d(TAG,下载状态改变:isSuccess);}Overridepublic void onDownloadProgressChanged(int progress) {runOnUiThread(()-{txtProgress.setVisibility(View.VISIBLE);txtContent.setText(正在下载新的安装程序请不要关机或断电);txtProgress.setText(progress%);pb.setProgress(progress);});}Overrideprotected void onDestroy() {super.onDestroy();//注销观察者DownloadManager.getInstance().unregisterObserver(this);}} 这样就通过观察者模式实现了UI和业务逻辑的解耦已经实时更新问题。 四总结 观察者模式在实际开发中应用面非常广泛它的主要作用就是对象解耦将观察者和被观察者完全隔离只依赖与Observer和Observable抽象。 优点 1观察者和被观察者之间是抽象耦合应对业务变化 2增加系统灵活性可扩展性。 缺点 程序中包括一个被观察者多个观察者开发和调试等内容会比较复杂在java中消息的通知默认是 顺序执行一个观察者卡顿会影响整体的执行效率在这种情况下一般考虑采用 异步的方式。 参考文献Android源码设计模式第二版
http://www.w-s-a.com/news/311619/

相关文章:

  • 公司网站背景图片课程网站如何建设
  • 用js做简单的网站页面互联网技术对人力资源管理的影响有哪些
  • 银川做网站贵德县wap网站建设公司
  • 深圳网站建设zvge山西省煤炭基本建设局网站
  • 佛山网页网站设计线上怎么做推广和宣传
  • 多个域名绑定同一个网站案例
  • 建设网站都需要准备什么代理加盟微信网站建设
  • 网站备案没有了wordpress 添加按钮
  • 湖南建设银行宣传部网站福田蒙派克空调滤芯安装位置图
  • wap网站搜索wordpress工作室模板
  • 青岛金融网站建设如何提交网站地图
  • 制作简单门户网站步骤网站建设论文的摘要
  • 可以直接进入网站的正能量照片学做静态网站
  • 织梦做社交网站合适吗网站的市场如何制作
  • 阳曲网站建设价格多少四川佳和建设工程网站
  • 免费注册店铺位置sem seo什么意思
  • 建筑网站搜图电子商务网站建设渠道
  • 学校网站内容四川手机网站开发
  • 网站制作公司违法商业网站运营成本
  • 显示佣金的网站是怎么做的广告设计主要做哪些
  • 做阿里网站的分录济南seo网站排名关键词优化
  • 北京建设银行纪念钞预定官方网站wordpress中文优化版
  • 宝安做棋牌网站建设找哪家效益快创意设计师个人网站
  • 做线上网站需要多少钱系统开发板价格
  • 建筑企业登录哪个网站wordpress feed地址
  • 网站建设流程百科提升seo搜索排名
  • 杭州网站建设 巴零做销售怎么和客户聊天
  • 北京自己怎样做网站wordpress oauth2插件
  • 上海800做网站wordpress建站的好处
  • 婚纱摄影网站设计模板如何做好网站内容