应用商店第二课--application层的实现
来源:互联网 发布:北京网络职业学院招聘 编辑:程序博客网 时间:2024/05/17 08:27
上一课讲到该应用商店的架构设计,设计的很简单,其实是没有扩展,再者这个项目本身就不是很复杂,设计的话就比较简单了。根据上一课的架构设计,这一课实现application层。
application层的话在app开发中还是有固定套路的。另外application层是一个应用程序最先开始执行的地方(contentprovide的oncreate方法在application onCreate方法之前调用),这里初始化一些数据是常见的套路。application层常见的套路如下:
- 用LeakCanary监控内存泄漏
- 用StrictMode来优化性能
- 日志打印工具类的初始化
- crash日志捕获
- 其他一些数据的初始化
在谈到application层的时候,有几个点需要注意,进程和线程的区别,我认为这个应该是要知道的,毕竟是最基础的东西了,我认为最大的区别是包裹关系,线程是CPU调度的最小单位,进程是系统分配资源的最小单位,一个进程至少有一个线程,在android应用中,进程的主线程是UI线程;在应用出现多进程的情况下会出现的问题有
- application调用多次
- 线程并发的会失效。
- sharepreference不可靠
- 单例模式失效
LeakCanary监控内存泄漏
这个在 网上有一大堆的介绍,我就不说了,我这边就把我的实现代码贴出来:
// 内存监控LeakCanary.install(this);
很简单的一句话就OK了,在build.gradle获取依赖。
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
StrictMode来优化性能
严苛模式来优化性能,那么什么时候严苛模式呢?严苛模式是一个开发工具,能够检测程序中的违例,从而修复。最常用的地方就是主线程中disk的读写和network。目前有两大策略:线程策略(ThreadPolicy)和Vm策略(VmPolicy)。
严苛模式的使用:
//当前是debug版本就使用严苛模式if (ApkDebugableOrRelease.isApkDebugable(this)) { userStrictMode();}/** * 使用严苛模式 */private void userStrictMode() {StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());}
日志打印工具类的初始化
日誌打印工具的話,看自己實現,每個人的實現都不同,但是一般应用的开发的话,都是在application初始化日志的。我这边把我的日志打印调用贴出来,更详细的代码,大家看我的github地址,我会把代码上传上去。
//日志打印初始化LoggerOpe.initLogLever(Log.VERBOSE, false, this);
crash日志捕获
crash日志的获取,这在现在应用中应该算是标配吧,要是连这个都没有的话,感觉效率会低很多,当然也有些因为安全问题不能打印。
我这边实现的crash其实也是参考网上大家的实现来的,下面我把调用贴一下,具体实现看github。
// crash日志捕获 CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(this);
其他一些数据的初始化
这一块由于现在还是应用开始阶段,我现在也没有想全需要初始化哪些数据,这一部分后面再补充。
这里我把我的application贴出来:
package com.cjw.appstroe.application;import android.app.Application;import android.os.StrictMode;import android.util.Log;import com.cjw.common.log.CrashHandler;import com.cjw.common.log.LoggerOpe;import com.cjw.common.utils.ApkDebugableOrRelease;import com.squareup.leakcanary.LeakCanary;/** * Created: chnejiewei * data: 2016/11/10 21:01 * blog: http://blog.csdn.net/u010392352 * weibo:C-Xstart * description: */public class AppStoreApp extends Application { @Override public void onCreate() { super.onCreate(); // 内存监控 LeakCanary.install(this); //当前是debug版本就使用严苛模式 if (ApkDebugableOrRelease.isApkDebugable(this)) { userStrictMode(); } //日志打印初始化 LoggerOpe.initLogLever(Log.VERBOSE, false, this); // crash日志捕获 CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(this); } /** * 使用严苛模式 */ private void userStrictMode() { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build()); }}
在博客中是不会单独讲到common层的,其实common层已经在实现了,比如我们的log类就实现在common里面,为什么?因为我们的log打印在我们整个的应用中都会涉及到,所以放在common是最好的,并且所有层都要依赖common层编译。
总结
至此,我们application层基本已经完成,整个application层的套路目前来看还是比较简单的。按照套路来一步一步走,可以很轻松的实现。接下来的一课我们,将要开始UI层的开发。
- 应用商店第二课--application层的实现
- 应用商店第一课--软件的架构
- 第二章、应用层
- 应用层的container_of()实现
- Android 应用商店的思考
- 商店应用的企业部署
- 重新安装windows10的应用商店
- 前端 简单实现应用商店list
- 实现App跳转到应用商店
- 利用Bmob公司的数据云存储,实现小米应用商店查看应用下载次数功能
- Android应用商店——Splash页面的实现,Android运行时权限的使用
- 驱动层与应用层通信的实现
- 简单层RPC应用的Java实现
- 【Android N7.0】Framework层实现派发HOME按键到Application层的一种简单方案
- 手机应用商店的隐秘世界
- 安卓应用商店的思考
- 商店应用的进程模型 -- 激活
- 商店应用的进程模型 -- 管理App
- eclipse最后一包的最后一个JAVA文件报错。怎么回事?
- 338. Counting Bits
- Glide使用 以及依赖
- hdu4786 Fibonacci Tree(最小生成树+最大生成树+01树+理解)
- POJ 3085 Quick Change G++
- 应用商店第二课--application层的实现
- Linux输入输出重定向
- jQuery过滤选择器——可见度过滤选择器
- ruby on rails 建新app
- FFmpeg发送流媒体的命令(UDP,RTP,RTMP)
- WEB前端常见面试题
- Java库中的常用集合(Collection/List/Set/Map)
- TextWatcher接口的使用:监听EditText文字变动事件
- 固定电压可调电压稳压芯片LM2596