比方说我在我的活动中有这个代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Thread cThread = new Thread(new Runner());
cThread.start();
}
private NotifyMe(){
//do something here
}
这是我的Runner类:
public class TCPClient implements Runnable {
public void run(){
//call NotifyMe() [THIS IS MY QUESTION]
}
}
我的活动中有一个运行Runner类的线程。 一旦线程启动,我想调用NotifyMe()函数 位于活动中。这可能吗? 如果您不理解我的问题,请告诉我。
答案 0 :(得分:1)
您可以向TCPClient添加一个构造函数,该构造函数引用该活动,将notifyMe方法更改为public,然后对存储在该线程中的activity对象调用notifyMe方法。
您将遇到的问题是,在线程运行时,活动可能会被关闭,暂停,销毁。要检查活动是否仍处于活动状态,请使用活动中的isFinishing()方法。
如果你的活动使用大量内存,这个解决方案有点危险,因为对线程中活动的引用会让垃圾收集器不回收活动中UI的drawable使用的内存,直到线程为止。已执行,也可以进行垃圾回收。如果你的活动内存不那么重,那应该没问题。如果是,或者如果您想从多个活动的线程中访问数据,请查看此question。
或多或少不相关的注意事项如果你有一个非常小的线程,在你的应用运行的整个过程中都无法运行,请使用AsyncTask。这将允许您简单地将单个操作放入后台。