3

これは、アクティビティ内でのインターフェイス、つまり onclickListener (および関連) の使用に関する二重の質問です。

  1. onCreate は短くする必要があります-ドキュメントにはそう書かれています-しかし、onClickListenersを持つビューがたくさんあると、かなり長くなる可能性があります。これにより、UI スレッドがタイムアウトするのではないかと心配しています。これは問題ですか?
  2. onClickListener を使用する最良の方法はありますか? つまり、Activity が onCLickListener を実装してから、非常に長い onClick() メソッドを持つ方が良いのでしょうか? または、次の操作を行います。

    mView.setOnClickListener(new OnClickListener(){
       ...
     });
    

ビューごとに?本当に違いはありますか?

4

3 に答える 3

3

onClickリスナー内のコードは、ビューをクリックしたときにのみ実行されるため、アクティビティの読み込みに煩わされることはありません。

さらに、onCreateで重いもの(ネットワーク、データベース、描画可能な操作など)を実行することはお勧めできません。そのような処理を本当に行う必要がある場合AsyncTaskは、コードを別のスレッドで実行するにオフロードして、UI(メイン)スレッドを解放します。

于 2012-07-31T15:32:52.950 に答える
3
  1. で処理するのに長い時間がかかることは何もしないという意味で、「短い」という意味ですonCreate()。数学の計算、ネットワーク、データベースアクセスなど、非常に大きなビットマップのインフレーションはスレッドで実行する必要があります。ビューにを設定する唯一のオーバーヘッドonClickListenerは、メソッドの呼び出し、参照の設定、および通常はオブジェクトの作成です。オブジェクトの作成で前述のいずれかを実行する場合は、オブジェクトを作成する前にオブジェクトをプリロードするのが最適です。

  2. 本当の違いはありません。何を選択するかは、あなたの意図とコーディングの麦粒腫に完全に依存します。あなたが示したような匿名オブジェクトを使用することは、それを行うための「設定して忘れる」スタイルの方法のようなものです。アクションがボタンに固有である場合に適しています。onClickListener()クリックするたびに持続する状態が必要な場合は、実装するまったく新しいクラスを作成する必要があります。このようにして、オブジェクトを1回作成し、必要なすべてのビューを1つのオブジェクトに設定します。多くのビューがクリックされたときに同じアクションを実行する場合は、そのようにすることも役立つ場合があります。

于 2012-07-31T15:40:25.907 に答える
2

1) I agree with Deev's answer.

2) Please note that if you choose to use the anonymous inner class solution

mView.setOnClickListener(new OnClickListener(){
...
});

You create an object for each assignment. Conversely if you implement OnClickListener in your activity you won't create any other object. This doesn't make so much difference for a small number of object but could save some memory (and save you from GC) for larger number (and you said to have a lots and lots) of objects. Avoid unuseless object creation is suggested in Designing for Performance

于 2012-07-31T15:48:24.133 に答える