代码之家  ›  专栏  ›  技术社区  ›  synic

更多的线索和方向改变问题

  •  0
  • synic  · 技术社区  · 14 年前

    当涉及到线程和方向更改时,通常要做的事情是这样:

    public class Bwent extends Activity {
        private static Bwent instance;
    
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
    
            instance = this;
        }
    
        //...
    

    这样,如果您使用线程发出网络请求,并且有人更改了电话的方向,那么线程将知道使用新的活动。

    但是,在Android破坏旧活动并创建新活动的过程中,线程是否可能完成?

    进程中是否有一段时间线程仍可能指向错误的活动,或部分破坏的活动?

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   CommonsWare    14 年前

    当涉及到线程和 方向改变,似乎 正常的做法是 这是:

    这是一件要做的事。我不确定这是否是“正常”的事情。我怀疑这是最好的事情。

    但是,是否有可能 线程可能会在这段时间内完成 Android正在破坏旧的活动 创造一个新的?

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

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

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

    相反,尝试 the pattern that I illustrate here . 使用一个 AsyncTask ,作为静态内部类或公共类实现。让他知道这项活动。让它只使用活动 doPostExecute() (或可能) onPublishProgress() )从路上 异步任务 Handler 工作,我们的理解是 异步任务 总是会有一个 Activity 在那些关于主线程的方法中。

    一些这种东西 was discussed recently .