0

ユーザーが短時間にボタンを押す速度が速すぎるためにエラーが発生しました。エラーは次のとおりです。

06-27 12:46:51.500: ERROR/ActivityManager(115): ANR in test.test.test (test.test.test/.testActivity)
06-27 12:46:51.500: ERROR/ActivityManager(115): Reason: keyDispatchingTimedOut
06-27 12:46:51.500: ERROR/ActivityManager(115): Load: 3.94 / 2.98 / 2.63
06-27 12:46:51.500: ERROR/ActivityManager(115): CPU usage from 5863ms to 0ms ago:
06-27 12:46:51.500: ERROR/ActivityManager(115):   5.6% 36/nandd: 0% user + 5.6% kernel
06-27 12:46:51.500: ERROR/ActivityManager(115):   1.7% 3/ksoftirqd/0: 0% user + 1.7% kernel
06-27 12:46:51.500: ERROR/ActivityManager(115):   1.5% 89/mediaserver: 1.5% user + 0% kernel / faults: 14 minor
06-27 12:46:51.500: ERROR/ActivityManager(115):   1% 5780/com.inno.wordcard: 1% user + 0% kernel / faults: 34 minor
06-27 12:46:51.500: ERROR/ActivityManager(115):   0.8% 115/system_server: 0.3% user + 0.5% kernel / faults: 8 minor
06-27 12:46:51.500: ERROR/ActivityManager(115):   0% 4933/kworker/0:0: 0% user + 0% kernel
06-27 12:46:51.500: ERROR/ActivityManager(115):   0.1% 176/com.android.systemui: 0.1% user + 0% kernel
06-27 12:46:51.500: ERROR/ActivityManager(115):   0.1% 1440/logcat: 0% user + 0.1% kernel
06-27 12:46:51.500: ERROR/ActivityManager(115): 93% TOTAL: 2.9% user + 9% kernel + 81% iowait
06-27 12:46:51.500: ERROR/ActivityManager(115): CPU usage from 217ms to 736ms later:
06-27 12:46:51.500: ERROR/ActivityManager(115):   7.6% 36/nandd: 0% user + 7.6% kernel
06-27 12:46:51.500: ERROR/ActivityManager(115):   3.8% 115/system_server: 0% user + 3.8% kernel
06-27 12:46:51.500: ERROR/ActivityManager(115):     1.9% 116/HeapWorker: 0% user + 1.9% kernel
06-27 12:46:51.500: ERROR/ActivityManager(115):     1.9% 149/InputDispatcher: 0% user + 1.9% kernel
06-27 12:46:51.500: ERROR/ActivityManager(115): 100% TOTAL: 0% user + 11% kernel + 88% iowait

どうすればそのような問題を防ぐことができますか?

4

2 に答える 2

2

ボタンがタップされた後に Web サービスを呼び出していますか? いくつかのオプションがあります:

1. バックグラウンドですべてを無効にする進行状況ダイアログを追加します。それが Web サービスの場合、これが最適なソリューションです。

2.アクションを実行している間、画面内のUI要素を無効にします。

3. 新しいスレッドまたは非同期タスクを生成します。

于 2012-06-27T06:17:35.660 に答える
0

ブール変数を使用して、ボタンをクリックするたびに次のようにコードを実行することができます。

boolean isClicked=true;
Button btn = (Button) findViewById(YourId);
btn.setonClickListener(listener);
public onClickListener listener = new View.OnclickListener{
      onclick(View v){
      if(isClicked==true)
      {
        isClicked=false;
        doWork();
        //DO YOUR WORK HERE...
      }
      else
      {
        // DO NOTHING...
      }
      }
}
 public void doWork(){
      /// YOUR CODE HERE...

         //USE AsyncTask ,Hanlder,handlerThread, or Thread for performing long running         task in background on button click
        isClicked=true;


     }
于 2012-06-27T06:28:21.147 に答える