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都会调节音乐模式音量。(这样做是因为部分手机在每个页面都调节铃声模式的音量)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值