Android開發常見bug及解決方法 (一)

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都會調節音樂模式音量。(這樣做是因爲部分手機在每個頁面都調節鈴聲模式的音量)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章