如何从另一个线程android访问对象

时间:2015-03-27 19:08:18

标签: android multithreading

这是我的MainActivity.java

public class MainActivity extends Activity implements OnItemClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


 //new thread for communication. 
   Thread communicationThread = new Thread() {
       public void run() {
        Communication communication_object = new Communication();
        communication_object.start();
       }
   };

   communicationThread.start();     
    }

通信类实现与服务器的TCP / IP连接,并且工作正常。

但现在我需要从另一个活动类 - 特别是login()方法访问该通信对象。 我可以从另一个类访问在该线程中运行的communication_object.login()吗?

1 个答案:

答案 0 :(得分:3)

您可以创建一个Thread并使其成为Singleton和/或对Object执行相同操作。

由于您无法序列化或将线程放入Bundle中,因此如果您想从另一个活动中访问它,则会将其存储在Activity之外。

您也可以在MainActivity中创建一个Singleton Thread,并使用静态方法访问它。

public class MainActivity extends Activity implements OnItemClickListener {

public static Thread communicationThread = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


 //new thread for communication. 
   communicationThread = new Thread() {
       public void run() {
        Communication communicationObject = new Communication();
        communicationObject.start();
       }
   };

   communicationThread.start();     
    }

 public static Thread getCommunicationThread() {
   if (communicationThread == null) { // init your Thread 
   } return communicationThread;   
}


public class LoginActivity extends Activity {
    MainActivity.getCommunicationThread()...
}