android从一个线程调用外部函数

时间:2010-06-10 06:15:13

标签: android multithreading function

比方说我在我的活动中有这个代码:

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()函数 位于活动中。这可能吗? 如果您不理解我的问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

您可以向TCPClient添加一个构造函数,该构造函数引用该活动,将notifyMe方法更改为public,然后对存储在该线程中的activity对象调用notifyMe方法。

您将遇到的问题是,在线程运行时,活动可能会被关闭,暂停,销毁。要检查活动是否仍处于活动状态,请使用活动中的isFinishing()方法。

如果你的活动使用大量内存,这个解决方案有点危险,因为对线程中活动的引用会让垃圾收集器不回收活动中UI的drawable使用的内存,直到线程为止。已执行,也可以进行垃圾回收。如果你的活动内存不那么重,那应该没问题。如果是,或者如果您想从多个活动的线程中访问数据,请查看此question

或多或少不相关的注意事项如果你有一个非常小的线程,在你的应用运行的整个过程中都无法运行,请使用AsyncTask。这将允许您简单地将单个操作放入后台。