为了账号安全,请及时绑定邮箱和手机立即绑定

如何在屏幕旋转期间处理AsyncTask?

如何在屏幕旋转期间处理AsyncTask?

白衣非少年 2019-08-26 11:22:06
如何在屏幕旋转期间处理AsyncTask?我读了很多关于如何保存我的实例状态或如何在屏幕旋转期间处理我的活动被破坏的内容。似乎有很多可能性,但我还没有想出哪一个最适合检索AsyncTask的结果。我有一些AsyncTasks只是再次启动并调用isFinishing()活动的方法,如果活动正在完成,他们不会更新任何东西。问题是我有一个任务对Web服务发出请求失败或成功的任务,并且重新启动任务会导致用户的经济损失。你怎么解决这个问题?可能的解决方案有哪些优点或缺点?
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

我的第一个建议是确保您确实需要在屏幕旋转时重置您的活动(默认行为)。每次我遇到旋转问题时,我都会<activity>在AndroidManifest.xml中将此属性添加到我的标签中,并且很好。

android:configChanges="keyboardHidden|orientation"

它看起来很奇怪,但是onConfigurationChanged()如果你不提供它,它会把它交给你的方法,它除了重新测量布局之外什么也没做什么,这似乎是一种在大多数时候处理旋转的完美的方法。


查看完整回答
反对 回复 2019-08-26
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

@Overrideprotected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    final AddTask task = mAddTask;
    if (task != null && task.getStatus() != UserTask.Status.FINISHED) {
        final String bookId = task.getBookId();
        task.cancel(true);

        if (bookId != null) {
            outState.putBoolean(STATE_ADD_IN_PROGRESS, true);
            outState.putString(STATE_ADD_BOOK, bookId);
        }

        mAddTask = null;
    }}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState.getBoolean(STATE_ADD_IN_PROGRESS)) {
        final String id = savedInstanceState.getString(STATE_ADD_BOOK);
        if (!BooksManager.bookExists(getContentResolver(), id)) {
            mAddTask = (AddTask) new AddTask().execute(id);
        }
    }}


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 388 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信