Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓系统-获取信号强度使我的应用程序无法响应_Android_Performance_Android Ui_Android Anr Dialog - Fatal编程技术网

Android 安卓系统-获取信号强度使我的应用程序无法响应

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

我有一个通过GPRS连接的Android应用程序。在我的一项活动中,我正在使用PhoneStateListener检查GSM信号强度。根据强度,我正在更新图像强信号,弱信号

下面是我正在使用的侦听器:

     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