1. 程式人生 > >Android 開發過程中碰到的小坑集合

Android 開發過程中碰到的小坑集合

  1. registerReceiver 和 unregisterReceiver 要同一個 mReceiver物件才行,否則會出現”Caused by: java.lang.IllegalArgumentException: Receiver not registered”錯誤。但是!即便是同一個 mReceiver也極容易犯這個錯誤,原因是mReceiver被多次unregisterReceiver,導致這個錯誤。解決辦法,設定一個全域性變數標記mReceiver是否被register過。
  2. 在SplashActivity或者LoginActivity跳轉到MainActivity之間,由於MainActivity是由一個ViewPager載入5個Fragment,每個Fragment載入了大量資料,因此整個MainActivity耗時過長,導致中間會有明顯的停頓,即SplashActivity或者LoginActivity好像在那裡卡住了,對於使用者來說,感覺像app沒有相應了一樣。所以,儘量在被跳轉的Activity中少做耗時操作。
  3. 對靜態成員變數初始化了,如下圖,若後面改變了Config.TEMP_UNIT,那麼MIN_YAXIS_TEMP是不會跟著變的,需要重新賦值一次。
public static float MIN_YAXIS_TEMP = getTemp(32);

public static float getTemp(float temp){
         if(Config.TEMP_UNIT.equals("ºC"))
            return temp;
         else
             return (float) (1.8 * temp + 32);
    }

4.. 當在Activity中覆蓋了 onCreateOptionsMenu 和 onOptionsItemSelected 方法,你會發現 對於此Activity 來說,getSupportActionBar().setDisplayHomeAsUpEnabled(true); 和在 Manifest.xml 中設定如下時,返回鍵點選無反應!

<activity android:name=".MainActivity"
            android:parentActivityName=".ChooseHardwareActivity"/>

解決辦法如下:

// 返回鍵的 id 為 android.R.id.home
@Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()){ case android.R.id.home: finish(); break; } return true; }

5.. 最好使用AppCompatActivity,不要使用Activity,否則後期定製會出現各種各樣的麻煩坑。
6.. 用soundPool來播放音樂時,load不能太大的音訊檔案,否則載入會失敗。其二是播放應該在load成功的回調了,而不是load後接著執行。

soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
            int loadId = soundPool.load(this.activity, R.raw.alarm, 1);
            AppLog.i("loadId = " + loadId);
            // id, 左聲道音量, 右聲道音量, 優先順序, 是否迴圈(0: 不迴圈, -1: 迴圈), 播放比率
            soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
                @Override
                public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                    AppLog.i("onLoadComplete sampleId = " + sampleId + ", status = " + status);
                    int streamId = soundPool.play(sampleId, 1, 1, 0, -1, 1);
                    alarming = true;

                    if(ALARM_COUNT == 3){
                        ALARM_COUNT = 1;
                    }else if(ALARM_COUNT == 1){
                        ALARM_DURATION = ALARM_ONE_MIN;
                        ALARM_COUNT ++;
                        stopAlarm(streamId);
                    }else if(ALARM_COUNT == 2){
                        ALARM_DURATION = 3 * ALARM_ONE_MIN;
                        ALARM_COUNT ++;
                        stopAlarm(streamId);
                    }

                    showAlarmDialog(streamId);
                }
            });


private void stopAlarm(final int streamId){
        activity.mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                soundPool.stop(streamId);
                alarming = false;
            }
        }, ALARM_DURATION);
    }

    private void showAlarmDialog(final int streamId){
        AlertDialog.Builder builder = new AlertDialog.Builder(this.activity);
        builder.setTitle(BleApplication.getInstance().getResources().getString(R.string.alarm));
        builder.setMessage(BleApplication.getInstance().getResources().getString(R.string.temp_exceed_threshold));
        builder.setPositiveButton(BleApplication.getInstance().getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                if(alarming) soundPool.stop(streamId);
            }});
        builder.create().show();
    }

相關推薦

Android 開發過程碰到的集合

registerReceiver 和 unregisterReceiver 要同一個 mReceiver物件才行,否則會出現”Caused by: java.lang.IllegalArgumentException: Receiver not registe

Android開發過程及解決方法收錄(四)

1.某個控制元件要放在Linearlayout佈局的底部(底部導航條) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.

Android開發過程及解決方法收錄

  1.某個控制元件要放在Linearlayout佈局的底部(底部導航條)      <LinearLayout      android:layout_width="match_parent"      android:orientation="vertical"      android:layou

Android Studio開發過程插曲(Wifi熱點開發遇到的問題與解決)

今天我參照《Android程式設計經典教程》進行wifi熱點開發。身為菜雞的我依然遇到了一些問題。 上一張截圖吧,免得大家不知道我說的問題在哪裡。 第一個問題: mainactivity.java中,我寫在wifiAdmin中的部分內容到了這裡又不能被識別了。 如

微信程式 開發過程遇到的(一)

1.我們使用app.json檔案來對微信小程式進行全域性配置,決定頁面檔案的路徑、視窗表現、設定網路超時時間、設定多 tab 的時候在pages中寫註釋的時候回報錯。 例如: { "pages":[ //這是首頁面 "pages/

Android開發過程及解決方法收錄(五)

版本號 如果 出現 過程 androi 分享圖片 onf blog end 1. 導入依賴庫出現錯誤 因為使用的sdk版本不同,使用下列代碼強制使用最低版本,25.3.1就是我當前使用的版本號,根據自己的情況修改 configurations.all {

使用phxpaxos開發過程遇到的

例如 exec 永遠 傳輸 snap 如果 poi 沒有 github 1. 開啟BatchPropose後,狀態機使用ExecuteForCheckpoint生成快照要註意: ExecuteForCheckpoint中的InstanceID不能立即持久化。 例如:

android開發過程一些遇到的問題

記錄android開發過程中遇到的問題。 1.在一個xml中能否使用同一個include多次 http://www.apkbus.com/android-104152-1-1.html android中include標籤的使用 http://

android 開發過程涉及到的清除快取操作

android 開發過程中會遇到很多快取,常常使人摸不清楚,這裡總結一下,希望下次遇到快取相關問題能有所幫助。 Clean Project 點選 Clean Project 會執行 clean、:

Android 開發過程遇到的問題Error:Execution failed for task ':app:processDebugManifest'

在開發過程中遇到了這樣一個問題: 問題1: Error:Execution failed for task ':app:processDebugManifest'.> Manifest merger failed with multiple errors, see l

Selenium:學習過程遇到的集合

在學習過程中,遇到已下問題 問題一: ChromeDriver error “unknown error: cannot get automation extension” 我用的chrome是70以上的版本,使用之前的chromedriver.exe時,報如上

微信公眾號開發過程遇到的

小白進行微信公眾號開發有半年,遇到了許多坑,android和IOS的相容性的時代性問題,還要微信瀏覽器的不友善;慢慢跟後續會加,有遇到的同行可以補充;以下; 1.點選事件失效     點選事件失效是最快遇到的問題,這個在android上沒有出現過問題,一般在IOS上面,尤

android.intent.action.SCREEN_ON和android.intent.action.SCREEN_OFF待機廣播在TV android開發過程,不響應原因.

待機廣播,又叫螢幕喚醒廣播:android.intent.action.SCREEN_ON和android.intent.action.SCREEN_OFF 在使用過程中需要主要以下兩點: 1.需要在AndroidManifest.xml添如下許可權: <uses

Android 開發過程平時遇到的一些問題及總結

相信大家都有面試的經歷,相對比面試官的問的一些問題其實都是基礎的知識,但就是一些基礎的知識我們也不是很完美的回答出來,我們也知道現在的開發人員很多,一家公司一個崗位就會有很多的開發者投遞,在那麼多開發者中你如何讓面試官很深的認識你,給面試官一個很深的印象,能讓他

Android tips(十三)-->Android開發過程使用Lambda表示式

新的Java8 API中提供了不少新的特性,其中就有Lambda表示式。而本文我們將主要介紹一下在Android開發過程中如何使用Lambda表示式,這裡主要是為我們後續介紹RxAndroid、RxJava相關知識做鋪墊的。 Lambda表示式的概念

Android 開發過程的異常奔潰處理

開發過程中捕獲異常並定位問題解決問題是基本之一,當然也有很多第三方的平臺,比如接入友盟統計、第三方加固(比如360加固等)、騰訊Bugly等都會為我們收集到異常日誌。但是,我個人認為開發及測試過程中編寫一個Crash收集工具類尤為重要。下面分享一下我的crash處理。直接上程

記錄的Android開發過程遇到的問題。

01-20 04:05:16.637:E / AndroidRuntime(1372):程序:com.jetsun.hbfc:webview,PID:1372 01-20 04:05:16.637:E / AndroidRuntime(1372):java.lang.RuntimeException :無法例

年度鉅獻-WPF專案開發過程WPF知識點彙總(原創+摘抄)

用了三年多的WPF,開發了很多個WPF的專案,就我自己的經驗,談一談如何學好WPF,當然,拋磚引玉,如果您有什麼建議也希望不吝賜教。 WPF,全名是Windows Presentation Foundation,是微軟在.net3.0 WinFX中提出的。WPF是對Direct3D的託管封裝,它

Android開發過程可能遇到的問題

一、匯入專案時,提示 “invalid project description” 無效的專案描述,應該與ADT版本不同有關。 出錯背景:外來原始碼放在工作區,然後匯入Eclipse。 解決方法:外來原始碼先放在非工作區(如:桌面),然後匯入到Eclipse,匯入頁面

android開發過程解決bug的方法

1、判斷手機型號 2、判斷手機版本號 1、解決魅藍3手機軟鍵盤不能頂上去佈局的問題 if (Build.MODEL.equals(“m3”)){ Log.i(“LHD”,”connect魅族3手機”);