一部の電話でスレッドと`onclickリスナーインスタンスで奇妙な動作をしています(Androidバージョンではなく、Android 4.03を搭載したGalaxyIIでテストして動作し、3.2を搭載したSamsumgGalaxyTabでは正常に動作しますandroid4.03を搭載したHTCEVODesign4Gおよびandroid2.3.3を搭載したHTCEVO4Gは機能しません)ので、ここに問題があります:
Webサービスを呼び出し、サービスが終了するまで画面をブロックする非同期クラスがあります。その後、スレッドはUIにサービス呼び出しが終了したことを通知し、UIaddView(GenerateView)
にアクティビティを作成するモーダル画面が表示されます。複数のビューがアクティビティに追加されているため、アクションをトリガーするボタンの複数のクリックを回避する必要があるまで、これは正常に機能します。だから私はOnClickListener
このようなカスタムを実装します:
public abstract class OnOneClickListener implements OnClickListener {
private boolean clickable;
public OnOneClickListener(){
clickable = true;
}
public final void onClick(View v) {
if (clickable) {
clickable = false;
onOneClick(v);
}
}
public abstract void onOneClick(View v);
public void reset() {
clickable = true;
}
}
そこで、カスタムを実装しonclick
、ボタンのクリック可能性をブロックし、Webサービスを呼び出し、ビューを作成して返す関数で終了したら、モーダルウィンドウが呼び出してアクティビティに追加し、reset()
ボタンを再度クリックできるようにします。その関数は、パラメーターによってクラスのインスタンスを受け取ります。これは前述の電話の魅力のように機能しますが、HTCでデバッグすると、関数がOnOneClickListener()
クリック可能な変数を変更し、関数がそれを認識reset()
しないことがわかります。そしてそれは逆の方法でも起こります。たとえば、関数の呼び出しがクラスの2つの異なるインスタンスにある場合とそうでない場合のように!! これは、HTCとスレッドで発生する問題の1つであり、最も驚くべき問題です。
だからここに私の質問があります:
- HTCとスレッドに関する既知の問題はありますか?
- 回避策はありますか?(AsyncTaskを使用して呼び出しを行っており、これまでは完璧に機能していました)
実際、失敗がどこにあるのかを理解するのに役立つと言えることは、私を夢中にさせるので非常に役立ちます。