获取其他Activity中开启的线程

来源:互联网 发布:linux 文件服务器 编辑:程序博客网 时间:2024/06/15 22:01

在MainActivity中开启了一个线程,用来连接蓝牙

connectThread = new ConnectThread(selectedDevice, mBluetoothAdapter);connectThread.start();


此线程开启后会获得一个已经连接蓝牙设备的BluetoothSocket

public void run(){    // 连接前先停止搜索,否则会影响连接速度    mmAdapter.cancelDiscovery();    // connect是一个阻塞式方法    try {        mmSocket.connect();    } catch (IOException e) {        Log.d(TAG, "run: 连接失败");        // 连接失败时要关闭socket        try {            mmSocket.close();        } catch (IOException e1) {            e1.printStackTrace();        }        return;    }    Log.d(TAG, mmSocket.isConnected()?"连接成功":"连接失败");    manageConnectedSocket(mmSocket);}

另一个TransActivity需要这个BluetoothSocket,只能通过MainActivity中开启的线程来获取


首先要在该线程类中提供一个方法

/** * 对外提供Socket * @return */public BluetoothSocket getSocket() {    Log.d(TAG, "getSocket: "+mmSocket==null?"socket为空":"socket不为空");   return mmSocket;}


只要获取了该线程,就能获取到这个socket

那么在其他Activity中怎么获取MainActivity中的线程呢?


首先声明一个instance变量,然后再onCreate方法中赋予MainActivity实例

public static MainActivity instance;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    instance=this;

在另一个Activity中获取该实例,进而获取到已经开启的线程

MainActivity activity=MainActivity.instance;connectThread=activity.getConnectThread(); // 不开启新的线程,而是从原有线程获取SocketmSocket = connectThread.getSocket();

当然,不要忘了在MainActivity中提供获取这个已经开启的线程的方法

public ConnectThread getConnectThread(){    return connectThread;}


阅读全文
0 0