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毫秒后执行逻辑。