Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更多线程和方向更改问题_Android - Fatal编程技术网

Android 更多线程和方向更改问题

Android 更多线程和方向更改问题,android,Android,当涉及到线程和方向变化时,通常会这样做: public class Bwent extends Activity { private static Bwent instance; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); instance = this; } //... 这样,如果您正在使用线程发出网络请求,并且有人

当涉及到线程和方向变化时,通常会这样做:

public class Bwent extends Activity {
    private static Bwent instance;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        instance = this;
    }

    //...
这样,如果您正在使用线程发出网络请求,并且有人更改了手机的方向,则线程将知道如何使用新活动

然而,在Android销毁旧活动并创建新活动期间,线程是否可能完成

进程中是否有一个时刻线程仍然可能指向错误的活动,或者部分被破坏的活动

似乎不应该这样,但即使使用在主线程中创建的处理程序,我也会遇到线程试图更新不再存在的对象时出现的间歇性问题。这很少见,但确实发生过

当涉及到线程和 方向改变了,看起来 正常的做法是 这:

这是一件必须做的事。我不确定这样做是否“正常”。我怀疑这是最好的做法

然而,有没有可能 线程可能在此期间完成 Android正在摧毁旧的活动 创造一个新的

对。您的代码中没有任何内容阻止它

在这个过程中有没有一个时刻 线程可能仍然指向 错误的活动,或部分错误 破坏活动

对。您的代码中没有任何内容阻止它

相反,试试看。使用
异步任务
,作为静态内部类或公共类实现。让它成为了解活动的人。让它只使用
doPostExecute()
(或者可能是
onPublishProgress()
)中的活动。从
AsyncTask
Handler
的工作方式来看,我们的理解是
AsyncTask
在主线程方法上总是有
活动


有些东西。

这基本上就是我正在做的。然而,似乎AsyncTask仍然有可能在返回时引用当前正在被销毁的活动(doPostExecute)。@synic:Streets of Boston,我还没有遇到它。而且,如果这是真的,那么除了让你的活动避免破坏/重建循环之外,你什么也做不了。@synic:他是我在原始答案中链接到的线程上的海报之一。实际上,我自己对这种方法没有任何问题。我之所以知道会发生这种情况,是因为我放了一个库,在发生崩溃时给我发邮件跟踪堆栈(它目前作为测试版软件发布),我每天都会收到几封关于它的电子邮件。我已经试着自己复制它,但我就是做不到。@synic:检查对象是否存在,如果不存在,在
处理程序上执行
postDelayed()
,在200毫秒后执行逻辑。