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

来源:互联网 发布:embedpano.js下载 编辑:程序博客网 时间:2024/05/16 12:14

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

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

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

/**

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

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

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页面,可以查看错误。

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

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时很需要的功能,如下所示:

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

image.png

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

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

image.png

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

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

阅读全文
0 0
原创粉丝点击