您的位置 首页 java

开发一个优秀的Android应用你必须要加入的代码及配置

  1. 开发一个Android App我们一般需要继承Application来初始化一些配置,如下所示:

a. application 中有一个registerActivityLifecycleCallbacks()方法,可以在回调中把整个应用打开的Activity保存在集合中、销毁的Activity重集合中删除。个人觉得这种方式比BaseActivity的方式或者每打开一个Activity把当前的引用加入到集合中的方式优雅多了,推荐大家用这种方式。关闭应用也非常方便,遍历保存Activity的集合,执行finish()就好。

/** 

b. 严苛模式StrictMode:建议大家在Debug版本打开严苛模式。 例如:严苛模式下可以检测到你应用中没有关闭的流,可以减少OOM,如下所示,可以看到在在控制台严苛模式模式下的Log输出。

image.png

ThreadPolicy 线程 策略检测

自定义的耗时调用 使用detectCustomSlowCalls()开启

磁盘读取操作 使用detectDiskReads()开启

磁盘写入操作 使用detectDiskWrites()开启

网络操作 使用detectNetwork()开启

VmPolicy虚拟机策略检测

Activity泄露 使用detectActivityLeaks()开启

未关闭的Closable对象泄露 使用detectLeakedClosableObjects()开启

泄露的 Sqlite 对象 使用detectLeakedSqlLiteObjects()开启

检测实例数量 使用setClassInstanceLimit()开启

/**严苛模式主要检测两大问题,一个是线程策略,即TreadPolicy,另一个是VM策略,即VmPolicy。*/if (AppConfig.IS_DEBUG &&  build .VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { 

c .在onCreate中,检测当前进程名称是否为应用包名,否则return (像百度地图等sdk需要在单独的进程中执行,会多次执行Application的onCreate()方法,所以为了只初始化一次应用配置,作此判断),代码如下:

/**检测当前进程名称是否为应用包名,否则return (像百度地图等sdk需要在单独的进程中执行,会多次执行Application的onCreate()方法,所以为了只初始化一次应用配置,作此判断)*/if (!CommonUtil.getCurProcessName(this).equals(getPackageName())) { return; 

d . Crash全局异常捕获,用到了一个第三方库,使用方法如下:

compile 'cat.ereza:customactivityoncrash:1.5.0' 
CustomActivityOnCrash.install(this); 

应用发生异常时customactivityoncrash库会打开一个如下图所示的Activity页面,可以查看错误。

image.png

e .其他配置初始化

private void init() { /**注册ActivityListener*/ 

2 .完整MyApplication代码,如下所示:

public class MyApplication extends Application { private static MyApplication application; /** 

3 . 应用的入口SplashActivity的onCreate方法中要加入如下代码,解决首次安装应用,点击应用图标打开应用,点击home健回到桌面,再次点击应用图标,进入应用时多次初始化SplashActivity的问题

/**在应用的入口activity加入以下代码,解决首次安装应用,点击应用图标打开应用,点击home健回到桌面,再次点击应用图标,进入应用时多次初始化SplashActivity的问题*/if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { 

4 . app下的build. gradle 配置,代码如下

apply plugin: 'com.android.application'apply plugin: 'com.antfortune.freeline'android { //国内镜像地址来下载 $ ./gradlew initFreeline -Pmirror 

5 . 应用根目录下得build.gradle文件配置,代码如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.ext { 

6 . 应用的混淆配置文件,代码如下:

-keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; 

7 . 此Demo的功能,可以在应用内切换Base_Url,退出登录时还原默认的Base_Url ,导出应用的私有数据到SD卡上,个人觉得这几个功能,是我们开发app时很需要的功能,如下所示:

image.png

8 . 混淆前后文件目录变化如下图所示,其中mapping.txt文件为混淆的映射文件,每个版本要注意保存起来(Umeng上需要导入这个文件的)。

image.png

9 . 对系统Log类的封装Logger类,可以在控制台打印出如下图所示的功能,主要实现代码如下:

StackTraceElement stackTrace = Thread.currentThread().getStackTrace()[4]; 

文章来源:智云一二三科技

文章标题:开发一个优秀的Android应用你必须要加入的代码及配置

文章地址:https://www.zhihuclub.com/181968.shtml

关于作者: 智云科技

热门文章

网站地图