There is very simple code. MainActivity.java:
public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<String> {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportLoaderManager().initLoader(0, null, this);
}
@NonNull
@Override
public Loader<String> onCreateLoader(int id, @Nullable Bundle args) {
return new TestLoader(this);
}
@Override
public void onLoadFinished(@NonNull Loader<String> loader, String data) {
Toast.makeText(this, data, Toast.LENGTH_LONG).show();
}
@Override
public void onLoaderReset(@NonNull Loader<String> loader) {
}
public static class TestLoader extends AsyncTaskLoader<String> {
public TestLoader(@NonNull Context context) {
super(context);
}
@Nullable
@Override
public String loadInBackground() {
Log.d("LOADER", "test");
return "TEST";
}
protected void onStartLoading() {
forceLoad();
}
}
}
build.gradle
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.myapplication"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
}
Android Studio 3.1.4. Every time after orientation change I see in log "com.myapplication D/LOADER: test"
Why? As I know, initLoader must return last data? Why loadInBackground called on orientation change?