2011-12-07 3 views
0

基本的に私のアプリケーションはすべて凍結されていますが、デバッグ時にエラーはスローされず、ANRは見えません。タッチには反応しませんが、その上に、フリーズした後にlogcatに表示されなくなる描画機能にfpsカウンタがあります。初めて私はこのような問題を見つける方法が分からないようなことに遭遇しました。私のアプリケーションは応答を停止しますが、ANRを投げず、デバッグの助けが必要です

何か助けていただければ幸いです。

+0

メインスレッドでネットワーク操作またはその他の重い操作が実行されていますか。 –

+0

私は1秒間、タッチするごとに最大8つの新しいカラー(r、g、b、a)オブジェクトを作成します。それは正常に動作するように見えるし、それはすべて凍結されます。 60fpsで安定して動作し、その後は何も動作しません。すべての描画は、それ自身のスレッドで行われます。私はそれが重いとは思わなかったが、多分私は色のオブジェクトをプールしようとする必要があり、問題がなくなるかどうかを確認する必要がありますか? –

答えて

0

logcatがアプリケーションからの出力を停止し、ANRがない場合、問題はonDraw()関数が呼び出されず、キャンバスが再描画されず、onTouch ()は、画面に触れるときに呼び出されていません。

SurfaceViewを使用している場合は、SurfaceHolderが正しく実装されていますか?

+0

はい、SurfaceView/Holderを使用していますが、私が知っている限り、それらは完全に実装されています。それはすごくうまくいっています、最近私はこれらの色の変化を入れて、しばらく働いているように見えますが、それが凍りつくでしょう。私はそれがちょうどあきらめるポイントにスレッドをオーバーロードしていると思いますか?私は、スレッドのpause()とstop()関数にtraceステートメントを入れようとしました。スレッドが停止している場所を正確に特定することさえできない。 –

+0

あなたが最近入れたものがなくてもうまくいくなら、あなたはどこに問題があるのか​​良い考えがあります。コードサンプルを表示した場合、ヘルプを提供する方が簡単かもしれません。 –

0

これは私に起こったとき、それは自分のコードでブレークポイントに達したためです。それはおそらくちょうど私です。

0

問題は無限ループでした。私は、メインスレッドがハングアップしていないので、ANRが表示されなかったと思います。私はそれを考え出したHOW

...

私は、EclipseてDDMSを更新し、私は実際にそれがフリーズしたいとき、すべてのCPUを取ったものをプロファイルできます。 DDMSがあまり役に立たなかった前。

int newC = -1; 
    while(newC < 0) 
    { 
     int rand = colorList.getRandom(); 
     for(int i = 0; i < 5; i++) 
     { 
      if(nopick[i].equals(colorList.getColor(rand))) 
       {rand = -1; break;} 
     } 
     if(rand != -1) 
      newC = rand; 
    } 

これは私が知っているようなコードです。今、私は馬鹿のように感じます。

関連する問題