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
釘釘羣截圖以下,具體實現能夠看對應官方文檔以及博客。相對來講比較簡單沒什麼技術含量,只是提供個方案。
能夠去除沒用的佈局、資源以及庫加上代碼混淆。通常公司可能用不到插件化我也不是很熟悉。
篇幅較長不作過多講解,學習混淆最主要的是知道混淆原則,就是哪些不該該被混淆。
關於性能優化的系列文章能夠看看他寫的文章有性能優化設計模式等等。