App的优化目的是为了让应用更快、更稳定、更小。网上也有不少相应的文章,可是不少由于花费时间跟优化程度不成正比,或者许多在开发过程当中本身已经避免了因此仅仅记录一下本身最近用过的。java
<!--启动activity时白屏替换-->
<style name="SplashStyle" parent="AppTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<!--若是须要效果更圆滑能够换成启动页的背景图-->
<item name="android:windowBackground">@color/theme_color</item>
<!--带有这个属性就会去除刘海屏-->
<item name="android:windowFullscreen">true</item>
</style>
复制代码
把启动页的主题换成android
<activity
android:name=".SplashActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/SplashStyle"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
复制代码
注意git
//延时销毁,避免白屏
new Handler().postDelayed(() -> {
finish();
}, 3000);
复制代码
ARouter.getInstance().build(RouterPath.MAIN)
.withTransition(R.anim.common_popup_fade_in, R.anim.common_popup_fade_out)
.navigation(this);
复制代码
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromAlpha="1.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:toAlpha="0.0"/>
复制代码
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromAlpha="0.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:toAlpha="1.0"/>
复制代码
/**
* 屏幕之外信息延时获取
*/
private void initDelay() {
// 拿到主线程的MessageQueue
Looper.myQueue().addIdleHandler(() -> {
// 最后返回false,后续不用再监听了。
return faslse;
});
}
复制代码
addIdleHandler 方法是当handle线程空闲再执行,基本上能够理解为界面显示后再执行。具体原理能够看mp.weixin.qq.com/s/KpeBqIEYe…github
对于一些不必在主线程执行的代码,如sp、数据库等代码能够在子线程初始化。数据库
看看是否过分绘制以及嵌套层级是否过多。这种通常在写代码时注意一下后期能够避免不少工做。设计模式
不少app没有作点击偏差处理,因此有时候点击两次会出现两个界面,虽然影响不大可是为了让用户体验更好。最好一开始就作好api
public class ViewOnClickUtils {
private static final int MIN_DELAY_TIME= 1000; // 两次点击间隔不能少于1000ms
private static long lastClickTime;
/**
* 判断是否快速点击
* @return
*/
public static boolean isFastClick() {
boolean flag = true;
long currentClickTime = System.currentTimeMillis();
if ((currentClickTime - lastClickTime) >= MIN_DELAY_TIME) {
flag = false;
}
lastClickTime = currentClickTime;
return flag;
}
/**
* 判断是否快速点击
* @param time 设置时间
* @return
*/
public static boolean isFastClick(int time) {
boolean flag = true;
long currentClickTime = System.currentTimeMillis();
if ((currentClickTime - lastClickTime) >= time) {
flag = false;
}
lastClickTime = currentClickTime;
return flag;
}
}
复制代码
tv.setOnClickListener(view -> {
if (ViewOnClickUtils.isFastClick()) {
return;
}
//逻辑操做
...
}
复制代码
更小的图片意味着加载更快,上传也更快。性能优化
避免内存泄漏、内存抖动。我我的以为这跟平时写代码比较相关bash
虽然在测试阶段已经会把这个过滤掉,可是实际使用时可能数据出错等等的缘由均可能致使崩溃。这时咱们最好接入Bugly,接入方法能够看官网,每次崩溃bugly都会记录。可是bugly天天只会推送一次,若是咱们须要作一些预警,能够监听app崩溃作个通知发给钉钉机器人或者咱们本身的后台方便咱们作热修复。app
钉钉群截图以下,具体实现能够看对应官方文档以及博客。相对来讲比较简单没什么技术含量,只是提供个方案。
能够去除没用的布局、资源以及库加上代码混淆。通常公司可能用不到插件化我也不是很熟悉。
篇幅较长不作过多讲解,学习混淆最主要的是知道混淆原则,就是哪些不该该被混淆。
关于性能优化的系列文章能够看看他写的文章有性能优化设计模式等等。