原来的代码:
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case GET_CURRENT_TIME:
Intent actiongetduration = new Intent("x1.getduration");
sendBroadcast(actiongetduration);
mSumtv.setText(Helper.SumDuration);
mNowtv.setText(Helper.CurrentDuration);
if(Helper.CurrentSecond == Helper.SumSecond) //播放完毕
{
if(Helper.CurrentSecond == 0)
{
Log.d(TAG, "in currentsecond == 0");
}
}
else
{
Log.d(TAG,"in set progress");
Log.d(TAG, "Helper.SumSecond == "+Helper.SumSecond);
long position = mSeekBar.getMax() * Helper.CurrentSecond / Helper.SumSecond;
mSeekBar.setProgress((int) position);
}
break;
}
}
};
修改后的代码:
static class MyHandler extends Handler {
WeakReference<BrowserActivity> mActivity;
MyHandler(BrowserActivity activity) {
mActivity = new WeakReference<BrowserActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
BrowserActivity theActivity = mActivity.get();
switch (msg.what) {
case GET_CURRENT_TIME:
Intent actiongetduration = new Intent("x1.getduration");
theActivity.sendBroadcast(actiongetduration);
theActivity.mSumtv.setText(Helper.SumDuration);
theActivity.mNowtv.setText(Helper.CurrentDuration);
if(Helper.CurrentSecond == Helper.SumSecond) //播放完毕
{
if(Helper.CurrentSecond == 0)
{
Log.d(TAG, "in currentsecond == 0");
}
}
else
{
Log.d(TAG,"in set progress");
Log.d(TAG, "Helper.SumSecond == "+Helper.SumSecond);
long position = theActivity.mSeekBar.getMax() * Helper.CurrentSecond / Helper.SumSecond;
theActivity.mSeekBar.setProgress((int) position);
}
break;
}
}
};
private MyHandler mHandler = new MyHandler(this);
题目出现的在定义mHandler那个地方的警告是消失了,可是还是会出现Fatal signal 6(SIGABRT) at 0x00000138(code=0)这个错误,是在libc里面报出来的,然后程序就崩溃了,下面弹出:ANR错误,reason是:keyDispatchingTimedOut。还要继续解bug啊。真是不知道问题出在哪里了。