【问题标题】:Keeping a reference to a Thread in a newly created activity在新创建的活动中保留对线程的引用
【发布时间】:2016-10-05 02:40:11
【问题描述】:

上下文:

  • Activity A 有一个线程作为字段。

  • A 初始化线程但不启动它。

  • A 启动 Activity B
  • 我希望 B 能够访问由 A 初始化的线程来进行一些计算。
  • 坚持在不使用AsynchTask的情况下实现这一点。只有 ThreadHandler

问题:

如果在 A 中初始化的线程是一个静态字段,我应该能够从 B 访问它吗?

如果是这样,如果我在 B 开头的意图中传递 A 的上下文会怎样?

例如:

class B extends Activity{
    @Override
    void onCreate(Bundle bundle){
         super.onCreate(bundle);

         // Retrieve A's context and access it's static field
         getAContexte().myThread.run();     
    }
}  

【问题讨论】:

  • 在 A 中创建线程并由 B 执行它听起来不是一个好方法。也许最好有一个服务并在其中创建一个新线程。
  • 在第二个活动中创建线程。然后将结果传递回第一个活动。使用在主 UI 线程上创建的处理程序将数据添加到视图。试图传递一个线程根本没有意义。
  • 你说没有意义?处理跨应用程序共享的通信套接字的 I/O 的线程怎么样。我在下面发布了对我有用的解决方案

标签: java android multithreading android-activity


【解决方案1】:

线程在运行之前只是一个普通对象。只需确保您采用标准方法来同步 A 和 B 之间的访问。例如,对 A 的上下文的访问和包含对 B 的线程的引用的字段必须正确同步。

【讨论】:

  • 谢谢你,解决了我的疑惑
【解决方案2】:

我最终使用单例模式在我的应用程序的活动之间传递我的线程:

我创建了一个包含我的线程的类。它有一个私有构造函数和一个静态 getInstance() 方法来返回包含我的线程的对象。每次使用它都会返回相同的实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多