2017-09-30 8 views
0

loadInBackground()メソッドからクラス属性を変更または読み取ろうとするとどうなりますか。何が起こるのですか?アンドロイドは変数を渡す前にディープコピーを作成しますか?AsyncTaskLoaderでクラス属性を変更するとどうなるか

loadInBackground()内の変更は、実際にはクラス属性値を変更しますか?

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Void> 
{ 
    public List<String> some_array = new ArrayList(); 
    public String  some_string = "Hello world"; 

    ... 

    @Override 
    public Loader<Void> onCreateLoader(int id, Bundle args) 
    { 
     return new AsyncTaskLoader<Void>(MainActivity.this) 
     { 
      @Override 
      protected void onStartLoading() 
      { 
       forceLoad(); 
      } 

      @Override 
      public Void loadInBackground() 
      { 
       some_array.add("some element"); 

       some_string = "good bye"; 
      } 
     }; 
    } 

    @Override 
    public void onLoadFinished(Loader<Void> loader, Void data) 
    { 
     // what are the values of some_array and some_string now? 
    } 

    @Override 
    public void onLoaderReset(Loader<Void> loader) 
    { 

    } 
} 

答えて

0

わかりましたので、私はそれをテストし、明らかにJavaは、バックグラウンドスレッドに配列のポインタを渡します。

したがって、バックグラウンドスレッドを変更すると、クラス変数が変更されます。しかし、これは避けるべきです。なぜなら、その非同期性は、予測可能性の欠如のために実際の厄介なものを素早く得ることができるからです。

代わりに、変更を保存する前に一時的な配列に保存してください。onLoadFinished

関連する問題