本文共 2948 字,大约阅读时间需要 9 分钟。
布局优化
布局优化的核心思想是通过减少布局文件的嵌套层级,降低Android绘制过程的复杂度,从而提升程序性能。优化之道主要包括:
标签和ViewStub也是优化布局的一种高手。标签通过布局重用降低了内存占用和绘制复杂度,而ViewStub则实现了按需加载控件功能,进一步提升了性能表现。
绘制优化主要关注在View的onDraw方法中是否存在耗时操作。避免频繁创建局部对象或执行复杂循环操作:
内存泄露是移动开发中的常见隐患,主要表现为静态变量或长生命周期对象未被释放。常见场景包括:
静态变量引发的内存泄露:
例如,静态变量引用了Activity自身或其他长生命周期对象,导致无法正常释放。public class MainActivity extends Activity { private static View sView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sView = new View(this); } // Activity无法销毁,sView持有 dù Activity已经不可见}
单例模式引发的内存泄露:
单例模式通过静态单例Holder实现长生命周期,但如果没有及时解注册,会导致关联的非静态对象无法释放。public class TestManager { private static class SingletonHolder { public static final TestManager INSTANCE = new TestManager(); } private TestManager() {} public static TestManager getInstance() { return SingletonHolder.INSTANCE; } }
如果某 Activity注册了这个单例而未取消注册,会导致内存泄露。
属性动画引发的内存泄露:
如果不停止 ObjectAnimator 的循环动画,会导致 Activity 的 View 被动画持有,进而引发内存泄露。protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ObjectAnimator animator = ObjectAnimator .ofFloat(mButton, "rotation", 0, 360) .setDuration(2000) .setRepeatCount(ValueAnimator.INFINITE) .start(); // 注意:未调用 cancel() 会导致内存泄露}
响应速度优化的核心是减少主线程上的阻塞操作,避免触发ANR(application not responsive)。具体措施包括:
/data/anr/
文件,可以通过分析 traces.txt
确定具体原因。例如以下代码会导致长时间ANR:protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SystemClock.sleep(30 * 1000); // 30秒会引发ANR}
Listview 优化:
Bitmap优化:
使用BitmapFactory.Options进行图片采样,避免将大图尺寸加载到内存中。例如:BitmapFactory.Options options = new BitmapFactory.Options();options.inSampleSize = 2; // 设定采样比例Bitmap bitmap = BitmapFactory.decodeResource(resId, options);
线程优化的目标是合理使用线程池,避免主线程被阻塞。推荐使用线程池进行耗时操作:
public class MyTask { public static void executeTask(String task) { Executors.newSingleThreadExecutor().execute(task); }}
m
或 m_
开头。s_
开头。转载地址:http://vzboz.baihongyu.com/