App Components
Service isolatedProcess=true 和普通进程分开,另开进程且无权限;只通过服务api进行通信;
Memory management
onTrimMemory(int level)
参数level来自ComponentCallbacks2类,有七个常量,但是主要关注下面两个:
- TRIM_MEMORY_BACKGROUND:LRU list最上面,不太可能被系统干掉。但是应该释放一些内存了。
- TRIM_MEMORY_MODERATE:LRU list中部,有点危险了,此时应该尽量释放内存。
onTrimMemory()方法的应用:可以参考Glide的trimMemory()方法。
lowmemorykiller干掉进程两个因素:app重要程度 及 app所占用内存大小;
在应用程序切到后台,或是系统所剩内存不足时,应尽可能释放内存,使占用内存减小,降低被系统杀死的可能性。用户再次进入app使用热启用 比 重新启动快2-3倍。
应用间的导航
考虑图一情况:
- Task A中有A1,A2及APP B的Activity B3;
- APP B没有启动,TASK B还没有创建;
此时在B3中想做向上导航,导航到B3的上级屏幕B2。配置B3Activity如下:
<activity android:name="B3Activity" android:parentActivityName=".B2Activity"/>
Android 系统在执行 onSupportNavigateUp()方法时,会根据B3Activity的parentActivityName 自动重建TASK B,如图2。
接着在B2做返回操作就可以返回到B1,即已经切换到Task B上下文中了。
请注意: 以上例子是用ActionBar方案时,系统才会自动处理。
如果想手动自己处理可以参考下面代码:
// 同应用中向上导航:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
// 向上导航 并考虑是否创建back stack
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
// This activity is NOT part of this app's task, so create a new task
// when navigating up, with a synthesized back stack.
TaskStackBuilder.create(this)
// Add all of this activity's parents to the back stack
.addNextIntentWithParentStack(upIntent)
// Navigate up to the closest parent
.startActivities();
} else {
// This activity is part of this app's task, so simply
// navigate up to the logical parent activity.
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
return super.onOptionsItemSelected(item);
}
更多可参考Compat包的NavUtils类,限于篇幅,不多讲。
Multimedia
Media codecs、Record audio on cue、Timed text tracks、Audio effects(Acoustic Echo Canceler (AEC)、Automatic Gain Control (AGC) 、Noise Suppressor (NS) )
Camera
Auto focus movement、Camera sounds
Accessibility service APIs
监控与模拟操作。
Copy and paste with intents
RenderScript
RenderScript 是一种低级的高性能编程语言,用于3D渲染和处理密集型计算。
Animation
Activity launch animations
Time animator
User Interface
Notifications
Notification styles:setStyle()
- Notification.BigPictureStyle
- Notification.BigTextStyle
- Notification.InboxStyle
Notification actions、Priorities
Controls for system UI
setSystemUiVisibility()
SYSTEM_UI_FLAG_FULLSCREEN
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
SYSTEM_UI_FLAG_LAYOUT_STABLE