Android 开发过程中碰到的小坑集合
2016-09-09 10:41
134 查看
registerReceiver 和 unregisterReceiver 要同一个 mReceiver对象才行,否则会出现”Caused by: java.lang.IllegalArgumentException: Receiver not registered”错误。但是!即便是同一个 mReceiver也极容易犯这个错误,原因是mReceiver被多次unregisterReceiver,导致这个错误。解决办法,设置一个全局变量标记mReceiver是否被register过。
在SplashActivity或者LoginActivity跳转到MainActivity之间,由于MainActivity是由一个ViewPager加载5个Fragment,每个Fragment加载了大量数据,因此整个MainActivity耗时过长,导致中间会有明显的停顿,即SplashActivity或者LoginActivity好像在那里卡住了,对于用户来说,感觉像app没有相应了一样。所以,尽量在被跳转的Activity中少做耗时操作。
对静态成员变量初始化了,如下图,若后面改变了Config.TEMP_UNIT,那么MIN_YAXIS_TEMP是不会跟着变的,需要重新赋值一次。
4.. 当在Activity中覆盖了 onCreateOptionsMenu 和 onOptionsItemSelected 方法,你会发现 对于此Activity 来说,getSupportActionBar().setDisplayHomeAsUpEnabled(true); 和在 Manifest.xml 中设置如下时,返回键点击无反应!
解决办法如下:
5.. 最好使用AppCompatActivity,不要使用Activity,否则后期定制会出现各种各样的麻烦坑。
6.. 用soundPool来播放音乐时,load不能太大的音频文件,否则加载会失败。其二是播放应该在load成功的回调了,而不是load后接着执行。
在SplashActivity或者LoginActivity跳转到MainActivity之间,由于MainActivity是由一个ViewPager加载5个Fragment,每个Fragment加载了大量数据,因此整个MainActivity耗时过长,导致中间会有明显的停顿,即SplashActivity或者LoginActivity好像在那里卡住了,对于用户来说,感觉像app没有相应了一样。所以,尽量在被跳转的Activity中少做耗时操作。
对静态成员变量初始化了,如下图,若后面改变了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开发过程中遇到的问题集合(—)
- Android开发过程中遇到的问题集合(—)
- 开发Android过程中遇到到的问题
- 移植Android开发过程
- Android开发环境搭建过程记录
- HAL层开发基础 && Android HAL module执行过程分析
- Android 分享两个你学习android 平台开发必须碰到的几个知识点的组件【天气预报、日期】View 组件
- Java开发过程中经常碰到数据类型的问题
- android系统开发小问题-启动过程中android字符没有显示出来
- android系统开发小问题-启动过程中android字符没有显示出来
- [开发]Android开发中碰到的问题
- 黑马程序员Java培训、Android培训_Java 学习过程记录_开发前奏
- 在Android1.5应用程序开发过程中使用JUnit
- 史上最全的android开发资料大集合
- 全程演示android开发环境的搭建过程
- android系统开发编译过程中的汇编错误
- 开发过程碰到的一个bug
- Android底层连接库的编译过程及其Android NDK开发实例
- android开发过程中遇到的一些问题汇总
- C++程序员进行Android开发大集合