1、音頻播放時,一定要思考異常處理、如其它事件播放音頻的打斷處理;
2、下載資源等異步操作的監聽器實現時,一定要對用到的所有成員變量判空
IDownloadResultListener mListener = new IDownloadResultListener() {
@Override
public void onResult(int errorCode) {
mHandler.sendEmptyMessage(MSG_WHAT);
}
};
當界面銷燬時,mHandler 可能銷燬了,但是監聽器可能沒有移除,接着就是崩潰。
3、android各機型實現ListView時,長按item可能會有某種顏色的背景,可能不符合界面風格。在佈局中使用:
android:listSelector="@android:color/transparent"
長按時顯示透明背景,保持風格一致。
4、使用android提供的API時,一定要充分考慮判空,舉例說:
Collections.sort(listMsgs, mComparator);
listMsgs爲空或者mComparator爲空,則崩潰。
5、在Android的Activity中調用finish方法,尤其是onCreate中判斷條件不符退出Activity時,一定不要忘了在finish方法後加上return:
this.finish();
return;
否則在onCreate的後續操作還會執行,簡而言之,finish方法並非調了Activity就銷燬。這樣後續的初始化界面等操作可能會導致崩潰。
另外在onDestory中釋放資源時,一定不要忘了判空,因爲this.finish會調用onDestory,這時可能類成員變量尚未初始化,會導致崩潰。
6、如果按鍵有提示音,則不要忘了關閉系統的按鍵音效,關閉方法:
view.setSoundEffectsEnabled(isEnabled);
7、界面上的Handler銷燬,由於Handler可能有延遲處理的消息,如果此時界面銷燬了,很可能會出現崩潰,正確的處理技巧爲:
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if(MainActivity.this.isFinishing()) {
return;
}
//TODO message operations
};
};
onDestory中:if(null != mHandler) {
mHandler.removeCallbacksAndMessages(null);
mHandler = null;
}
保證界面銷燬時,移除所有Handler需要未處理的消息和Runnable等。
8、爲了增加界面交互的易用性,當界面需要播放音樂時,最好建議系統的音量調節在該界面調整爲音樂模式,保證用戶可以便捷的調整音量,方法爲:
@Override
protected void onResume() {
// 增加媒體音量調節功能
setVolumeControlStream(AudioManager.STREAM_MUSIC);
super.onResume();
}
這樣每款手機的音量調節在該Activity都會調節音樂模式音量。(這樣做是因爲部分手機在每個頁面都調節鈴聲模式的音量)