Android LoaderManager AsyncTaskLoader cancelLoad不deliverResult,Java

Android LoaderManager AsyncTaskLoader cancelLoad不deliverResult,Java

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.AsyncTaskLoader;
import androidx.loader.content.Loader;

import android.content.Context;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;


public class MainActivity extends AppCompatActivity {
    private static String TAG = "fly";

    private LoaderManager loaderManager;

    private static int index = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                index++;

                Log.d("fly", "--" + index + "--");
                Log.d("fly", "开始新任务" + index);
                loaderManager.getLoader(2023).forceLoad();
            }
        });

        findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("fly", "放弃加载" + index);
                loaderManager.getLoader(2023).cancelLoad(); //deliverResult不执行
            }
        });

        setupLoader();
    }

    private void setupLoader() {
        loaderManager = LoaderManager.getInstance(this);
        loaderManager.initLoader(2023, new Bundle(), loaderCallbacks);
    }

    private LoaderManager.LoaderCallbacks loaderCallbacks = new LoaderManager.LoaderCallbacks<String>() {
        @NonNull
        @Override
        public MyTask onCreateLoader(int id, @Nullable Bundle args) {
            Log.d(TAG, "onCreateLoader- id - " + id);
            MyTask loader = new MyTask(getApplicationContext());
            return loader;
        }

        @Override
        public void onLoadFinished(@NonNull Loader<String> loader, String data) {
            Log.d(TAG, "onLoadFinished- " + loader.getId() + " " + data);
        }

        @Override
        public void onLoaderReset(@NonNull Loader loader) {

        }
    };

    private static class MyTask extends AsyncTaskLoader<String> {

        public MyTask(@NonNull Context context) {
            super(context);
        }

        @Nullable
        @Override
        public String loadInBackground() {
            Log.d("fly", index + " loadInBackground 开始@" + Thread.currentThread().getId());
            SystemClock.sleep(5000);
            Log.d("fly", index + " loadInBackground 结束@" + Thread.currentThread().getId());
            return index + "";
        }

        @Override
        public void deliverResult(@Nullable String data) {
            super.deliverResult(data);
            Log.d("fly", "deliverResult -> " + data + " 结束");
        }

        @Override
        protected void onStopLoading() { //绑定的Activity生命周期自动执行,切入后台
            super.onStopLoading();
            Log.d("fly", "onStopLoading");
        }


        @Override
        protected void onStartLoading() { //绑定的Activity生命周期自动执行,切入前台
            super.onStartLoading();
        }


        @Override
        public void onCanceled(@Nullable String data) {
            super.onCanceled(data);
            Log.d("fly", "onCanceled @" + Thread.currentThread().getId());
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "---");
        Log.d(TAG, "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }
}

android ,LoaderManager.LoaderCallbacks与AsyncTaskLoader, Java(2)_zhangphil的博客-CSDN博客android LoaderManager与AsyncTaskLoader,java(1)_zhangphil的博客-CSDN博客。android LoaderManager与AsyncTaskLoader,java(1)https://blog.csdn.net/zhangphil/article/details/129625669

android LoaderManager与AsyncTaskLoader,java(1)_zhangphil的博客-CSDN博客android LoaderManager与AsyncTaskLoader,java(1)https://blog.csdn.net/zhangphil/article/details/129622307

https://zhangphil.blog.csdn.net/article/details/129582389icon-default.png?t=N2N8https://zhangphil.blog.csdn.net/article/details/129582389

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/129728606
今日推荐