1

バックグラウンドで何かをしたいとき、アクションが非常に単純な場合:「バックグラウンドで何か」を実行してからUIを更新するように、使用をAsyncTask検討しているIを使用する代わりに(コーディングを高速化するため):

 new Thread(){
      public void run(){
          final ArrayList<myObjects> objects= myDatabase.queryObjects();
          runOnUiThread(new Runnable() {

             @Override
             public void run() {
                updateUIWith(objects);              
            }
        });
      }
 }

しかし、そのように「最終的な」オブジェクトを使用すると、メモリリークが発生したり、その他の問題が発生したりする可能性があるかどうかはわかりません。

この方法を使用しても大丈夫ですか?

4

2 に答える 2

3

finalobjectsコード内で変数を再割り当てしないことをコンパイラーに通知するだけです。finalとメモリリークの間にリンクはありません。

匿名の内部クラス(new Runnable...)を使用する場合は、objectsfinalを作成する必要があります。

私はAndroidにあまり詳しくありませんが、updateUIWith()メソッドがUIオブジェクトと相互作用する場合は、UIの更新を特定のUIスレッドで実行する必要があると想定しているため、問題になる可能性があります。そのメソッドでUIオブジェクトを更新しない場合は、コードで問題ありません。

于 2012-04-10T09:36:39.290 に答える
0

問題は、小さなアクションごとに新しいスレッドを開くのは良い考えですか?AsyncTaskは、他の誰かによって管理されているスレッドの便利さを提供しますが、あなたが行ったようにスレッドを宣言するときは、スレッド数の制限などの状況に対処する責任があります。

于 2013-06-15T15:03:29.797 に答える