一、缩短应用程序启动时间
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、启动窗口主题的优化
二、提高应用程序稳定性
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的体积。