【代码优化】
避免频繁分配内存(内存碎片、GC压力)优先使用SparseArray替代HashMap(KEY为int时、线程不安全)主线程中非静态Handler内部类容易导致内存泄露,如下: private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { } };可以考虑静态Handler内部类配合虚引用使用,如下:
private static class InnerHandler extends Handler { private final WeakReference<ActivitySplash> mActivity; public InnerHandler(ActivitySplash activity) { mActivity = new WeakReference<ActivitySplash>(activity); } @Override public void handleMessage(Message msg) { ActivitySplash activity = mActivity.get(); if (activity != null) { // TODO } } } private final Handler mHandler = new InnerHandler(this); 单例中不要持有Activity/Service Context,可使用getApplicationContext【图片优化】
考虑使用WebP(Android 4.0开始支持,Android 4.3开始支持透明通道)图片压缩工具:无损压缩ImageOptim、有损压缩ImageAlpha、转WebP工具iSparta加载图片时使用inSampleSize进行缩放,减少内存压力【电量优化】
切换到后台的时候停止广播监听: @Override protected void onResume() { super.onResume(); enableBroadcastReceiver(this, true, mReceiver.getClass()); } @Override protected void onPause() { super.onPause(); enableBroadcastReceiver(this, false, mReceiver.getClass()); } public static void enableBroadcastReceiver(Context context, boolean isEnable, Class<?> receiver) { ComponentName componentName = new ComponentName(context, receiver); int newState = isEnable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; context.getPackageManager().setComponentEnabledSetting(componentName, newState, PackageManager.DONT_KILL_APP); } 及时释放WakeLock【布局优化】
使用ViewStub延迟加载当根节点是FrameLayout的时候,考虑使用merge作为根节点考虑使用TextView的android:drawableXxx节省一个ImageView,例如: android:drawableLeft="@drawable/ic_launcher" android:drawablePadding="10dp"【网络优化】
优先使用IP访问,避免DNS解析合并请求、避免轮询、数据压缩、数据缓存(LruCache、DiskLruCache)