网站首页 > 教程分享 正文
开发一个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];
猜你喜欢
- 2024-10-11 二、Android界面开发(安卓界面开发)
- 2024-10-11 你需要懂的安卓开发的学习流程(安卓开发要学哪些知识)
- 2024-10-11 (干货!)Android Studio开发实战:从零基础到App上线
- 2024-10-11 Android开发上还动不动混淆?这有一份踩坑总结
- 2024-10-11 天天玩手机却不了解Android操作系统?5分钟带你扫盲
- 2024-10-11 Android小白福利:开发环境搭建——图文超详细解说
- 2024-10-11 APP的开发过程详细介绍,长春APP开发公司科普
- 2024-10-11 安卓软件开发(安卓软件开发需要学什么)
- 2024-10-11 01.Android快速开发教程——序章(安卓快速开发平台)
- 2024-10-11 Android应用开发(android应用开发实训报告)
你 发表评论:
欢迎- 最近发表
-
- 有了这份900多页的Android面试指南,你离大厂Offer还远吗?
- K2 Blackpearl 流程平台总体功能介绍:常规流程功能
- 零基础安卓开发起步(一)(安卓开发入门视频)
- 教程:让你的安卓像Windows一样实现程序窗口化运行
- Android事件总线还能怎么玩?(事件总线有什么好处)
- Android 面试被问“谈谈架构”,到底要怎样回答才好?
- Android开发工具Parcel和Serialize
- Android 中Notification的运用(notification widget安卓)
- Android退出所有Activity最优雅的方式
- MT管理器-简单实战-去除启动页(mt管理器怎么去除软件弹窗)
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)