Android 安卓系统-获取信号强度使我的应用程序无法响应
我有一个通过GPRS连接的Android应用程序。在我的一项活动中,我正在使用PhoneStateListener检查GSM信号强度。根据强度,我正在更新图像强信号,弱信号 下面是我正在使用的侦听器:Android 安卓系统-获取信号强度使我的应用程序无法响应,android,performance,android-ui,android-anr-dialog,Android,Performance,Android Ui,Android Anr Dialog,我有一个通过GPRS连接的Android应用程序。在我的一项活动中,我正在使用PhoneStateListener检查GSM信号强度。根据强度,我正在更新图像强信号,弱信号 下面是我正在使用的侦听器: private class MyPhoneStateListener extends PhoneStateListener { /* Get the Signal strength from the provider, each tiome there is an update
private class MyPhoneStateListener extends PhoneStateListener
{
/* Get the Signal strength from the provider, each tiome there is an update */
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength)
{
super.onSignalStrengthsChanged(signalStrength);
Log.v("final","signal strength: "+signalStrength.getGsmSignalStrength());
if (signalStrength.getGsmSignalStrength() < 5 || signalStrength.getGsmSignalStrength() == 99)
{
//poor connection or no connection
signal.setImageResource(R.drawable.signal_poor);
}
else if(signalStrength.getGsmSignalStrength() >= 5 && signalStrength.getGsmSignalStrength() < 8)
{
signal.setImageResource(R.drawable.signal_very_poor);
}
else if(signalStrength.getGsmSignalStrength() >= 8 && signalStrength.getGsmSignalStrength() < 12)
{
signal.setImageResource(R.drawable.signal_medium);
}
else if(signalStrength.getGsmSignalStrength() >= 12)
{
signal.setImageResource(R.drawable.signal);
}
}
};
问题是,有时在访问活动时,我的包中会出现一个ANR,原因是:keyDispatchingTimedOut
09-11 12:04:02.125 1270-1309/system_process E/ActivityManager﹕ ANR in com.example.myApp (com.example.myApp/.myActivity)
Reason: keyDispatchingTimedOut
Load: 1.84 / 1.26 / 0.53
CPU usage from 9732ms to 3045ms ago:
76% 1916/gsm0710muxd_bp: 12% user + 64% kernel / faults: 1 minor
10% 1875/com.example.universalapp: 8.1% user + 2.8% kernel / faults: 1488 minor 4 major
6.3% 1270/system_server: 5.4% user + 0.9% kernel / faults: 481 minor 2 majo
这些函数消耗了76%的CPU?有那么重吗?如何在不影响用户界面的情况下运行它们,并在信号强度发生变化时仍然更新用户界面?您可以查看Android操作系统是如何实现的。侦听器被触发的频率有多高?它多久改变一次?数据可能非常不稳定,您需要获取过去5、10、100个信号的运行平均值。这也可能是一个需要兑现图像的问题。@cyroxis,我无法控制何时调用它,但从每2秒的观察来看,级别会发生变化。它是否可以设置为每5秒检查一次,而不是在值更改时检查?另一方面,你能详细说明一下如何兑现这些图片吗?我正在使用的图像保存在Drawable中,我应该将它们缓存在代码中吗?
09-11 12:04:02.125 1270-1309/system_process E/ActivityManager﹕ ANR in com.example.myApp (com.example.myApp/.myActivity)
Reason: keyDispatchingTimedOut
Load: 1.84 / 1.26 / 0.53
CPU usage from 9732ms to 3045ms ago:
76% 1916/gsm0710muxd_bp: 12% user + 64% kernel / faults: 1 minor
10% 1875/com.example.universalapp: 8.1% user + 2.8% kernel / faults: 1488 minor 4 major
6.3% 1270/system_server: 5.4% user + 0.9% kernel / faults: 481 minor 2 majo