学习笔记·Android开发艺术探索

第1章 Activity的生命周期和启动模式

  • onCreate onStart onResume onPause onStop onDestroy onRestart onSaveInstanceState onRestoreInstanceState(onStart之后调)。
  • 如果不想让Activity在屏幕旋转时重新创建,可以设置android:configChanges="orientation",这种情况下会调Activity的onConfigurationChanged方法。
  • android:launchMode="standard|singleTop|singleTask|singleInstance",singleInstance是一种加强的singleTask模式,singleTask模式会调onNewIntent。
  • TaskAffinity(任务相关性),这个参数标识了一个Activity所需要的任务栈的名字。主要和singleTask启动模式或者allowTaskReparenting属性配对使用。taskAffinity属性的值为字符串,且中间必须包含分隔符“.”(如android:taskAffinity="com.wpq.task1")。
  • IntentFilter匹配规则。启动Activity分为两种,显示调用和隐式调用。隐式调用需要Intent能够匹配IntentFilter中设置的过滤信息(action、category、data),action的匹配要求Intent中的action存在且必须和过滤规则中的其中一个action相同。category默认为“android.intent.category.DEFAULT”,为了能够接收隐式调用,必须在intent-filter中指定这个category。data由mimeType和URI两部分组成。mimeType指媒体类型,如image/jpeg、audio/mpeg4-generic和video/*等。URI的关键词:scheme、host、port、path。隐式调用的时候注意判断匹配,判断方法有两种:采用PackageManager的resolveActivity或者Intent的resolveActivity,PackageManager还有queryIntentActivities方法。

第9章 四大组件的工作过程

  • Activity。展示型组件,负责界面展示和用户交互。
  • Service。计算型组件,用于在后台执行耗时任务。
  • BroadcastReceiver。消息型组件,用于在不同组件间传递消息。
  • ContentProvider。数据共享型组件,用于向其他组件和应用共享数据。

第15章 Android性能优化

  • 布局优化。层级相同的情况下优先使用LinearLayout,因为RelativeLayout比较复杂,绘制时会执行两次onMeasure。另一种优化方式是采用和ViewStub。
  • 绘制优化。主要针对onDraw方法,尽量不要在onDraw中创建新的局部对象,频繁调用会产生大量临时对象,不仅占用过多内存还会导致频繁gc影响执行效率;不在onDraw中做耗时任务。
  • 内存泄漏优化。1. 静态变量导致的内存泄漏,如sContext引用Activity导致无法正常销毁;2. 单例模式导致的内存泄漏,如注册了监听没有解注册,导致某些对象被持有无法及时释放;3. 属性动画导致的内存泄漏,无限循环的动画没有在onDestroy中停止,导致View被动画持有,Activity被View持有无法释放。
  • 响应速度优化和ANR日志分析。响应速度优化的核心思想是避免在主线程中做耗时操作,Activity如果5s内无法响应会ANR,BroadcastReceiver如果10s内未执行完操作也会ANR。
  • ListView和Bitmap优化。ListView优化分为三个方面:采用ViewHolder缓存策略;当列表快速滚动时不执行大量异步任务;开启硬件加速使ListView滑动更加流畅。Bitmap主要通过BitmapFactory.Options根据需要对图片进行采样,采样过程中主要用到了inSampleSize参数。
  • 线程优化。尽量采用线程池,避免创建大量的Thread。
  • 其他优化。不要过多使用枚举,占用空间比整型大;常量使用static final修饰;使用Android特有的数据结构,如SparseArray和Pair等;适当使用软引用和若引用;采用内存缓存和磁盘缓存;尽量采用静态内部类,避免潜在的由于内部类导致的内存泄漏。
  • 内存泄漏分析工具MAT(Eclipse Memory Analyzer)。
  • 提高程序的可维护性:代码风格、代码的层次性和单一职责原则、面向扩展编程以及恰当使用设计模式。

你可能感兴趣的:(学习笔记·Android开发艺术探索)