一、縮短應用程序啟動時間
1、盡量避免在應用程序啟動時進行耗時操作。可以將這些操作放到應用程序已啟動的情況下再進行。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在增加這個之前是有Activity的默認動畫的, // 加上後Activity進入時沒有任何動畫效果, // 而退出時有返回效果(比如頁面縮小漸隱)。 overridePendingTransition(0, 0); setContentView(R.layout.activity_main); //...在此進行其他操作 } }
2、啟動窗口主題的優化
true @android:color/transparent @null true true true
二、提高應用程序穩定性
1、捕捉異常並上報
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // 捕獲全局異常 Thread.setDefaultUncaughtExceptionHandler(uncaughtExceptionHandler); } /** * 全局異常捕獲 */ private Thread.UncaughtExceptionHandler uncaughtExceptionHandler = (thread, throwable) -> { LogUtil.e("捕獲全局異常", throwable); // Now send the crash to your server or save it to your preferred location, something like, // MyAppClass.sendCrashToServer(throwable); }; }
2、使用Crashlytics進行崩潰上報
// 在Application中初始化 public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // 初始化Crashlytics if (!BuildConfig.DEBUG) { Fabric.with(this, new Crashlytics()); Crashlytics.setUserIdentifier("user-identifier"); } } } // 在出現異常處添加以下代碼 Crashlytics.logException(Throwable);
三、提升界面交互體驗
1、交互反饋優化
// 使用Snackbar顯示提示信息 public class MainActivity extends AppCompatActivity { private View mainView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainView = findViewById(R.id.main_view); } private void showMsg(String msg) { Snackbar.make(mainView, Html.escapeHtml(msg), Snackbar.LENGTH_LONG).show(); } } // 使用Dialog顯示提示信息 public void showDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(Html.escapeHtml(title)) .setMessage(Html.escapeHtml(msg)) .setPositiveButton("確定", null) .create() .show(); } // 使用Toast顯示提示信息 public void showToast(String msg) { Toast.makeText(context, Html.escapeHtml(msg), Toast.LENGTH_SHORT).show(); }
2、手勢和動畫
// 啟用手勢返回 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 啟用手勢返回 supportFinishAfterTransition(); } } // 實現界面過渡動畫 // 在Activity A中跳轉到Activity B時,設置Activity A的退出和Activity B的進入動畫如下 startActivity(intent); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
3、布局優化
使用ConstraintLayout進行布局優化,減少嵌套層級
四、提高應用程序安全性
1、禁用http請求,強制使用https
...
2、防止構建 APK 時出現 AndroidManifest.xml 映射攻擊
... ...
3、禁用調試模式和Android日誌
if(BuildConfig.DEBUG) { android.os.Debug.waitForDebugger(); } Log.d("TAG", "message");
五、減少應用程序體積大小
1、使用webp圖片格式
WebP是一種可以包含有損壓縮和無損壓縮的圖像格式。和JPEG相比,WebP有更好的壓縮效率,可以減少圖片在應用程序中的大小便於快速加載。
2、混淆代碼
混淆是一種通過代碼優化、刪除無用代碼、代碼打亂等方式降低代碼容易被惡意反編譯破解的過程。在打包apk時對代碼進行混淆即可以減少apk的體積大小。
3、使用App Bundle打包方式
在使用App Bundle打包方式時,Google Play商店會在應用程序低流量時只會下載部分代碼,是apk包更加高效,同時也減少了apk的體積。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/197102.html