在新创建的活动中保留对线程的引用
Posted
技术标签:
【中文标题】在新创建的活动中保留对线程的引用【英文标题】: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的情况下实现这一点。只有 Thread 和 Handler。问题:
如果在 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 的线程怎么样。我在下面发布了对我有用的解决方案 【参考方案1】:线程在运行之前只是一个普通对象。只需确保您采用标准方法来同步 A 和 B 之间的访问。例如,对 A 的上下文的访问和包含对 B 的线程的引用的字段必须正确同步。
【讨论】:
谢谢你,解决了我的疑惑【参考方案2】:我最终使用单例模式在我的应用程序的活动之间传递我的线程:
我创建了一个包含我的线程的类。它有一个私有构造函数和一个静态 getInstance() 方法来返回包含我的线程的对象。每次使用它都会返回相同的实例。
【讨论】:
以上是关于在新创建的活动中保留对线程的引用的主要内容,如果未能解决你的问题,请参考以下文章