首页 > 解决方案 > 外部线程可以通过参数获得服务的上下文吗?

问题描述

我的前台服务创建线程,这些线程需要有上下文。

所以我把它传递给喜欢:MyThread mt = new MyThread(this) 在服务。

MyThread 通过自己的成员值保存其上下文参数,例如:

private Context serviceContext = parameterContext在线程中。

这可能吗?或者有什么危险?

精确代码:

在服务中:

(...)

 BleTalker bt = new BleTalker(devNo,bdv,bleHandler,this);
        bt.start();
       

在 BleTalker 线程类中:


     public BleTalker(int dNum, BluetoothDevice device, Handler bh,Context c){
        this.devNumber = dNum;
        myDevice = device;
        bleHandler = bh;
        serviceContext = c;
        Log.d(gd,"ble talker thread is init");
    }
    

    public void initBLE(){

        Log.d(gd,"get device? : " + myDevice.getName());
        BluetoothManager bm = (BluetoothManager) serviceContext.getSystemService(Context.BLUETOOTH_SERVICE);
        mBluetoothAdapter = bm.getAdapter();
        bluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();

        if(myDevice!= null) { 
            //This method is used to re-connect to a remote device after the connection has been dropped.
            connect(myDevice.getAddress(),true );
        }

    }

标签: androidservicebluetooth-lowenergy

解决方案


要在 Thread 类中获取上下文,请在 Thread 类中创建构造函数并使用它。

例如,我想从 Thread 类中的 sharedPreference 中获取信息。

    public class PrintControl {

        private Context context;
        private SharedPreferences printPreferences;
    
        public PrintControl(Context context) {
            this.context = context;
            printPreferences = this.context.getSharedPreferences("printInfo", MODE_PRIVATE);
        }
    }

现在我可以在 Thread 类中使用上下文。


推荐阅读