android - 外部线程可以通过参数获得服务的上下文吗?
问题描述
我的前台服务创建线程,这些线程需要有上下文。
所以我把它传递给喜欢: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 );
}
}
解决方案
要在 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 类中使用上下文。
推荐阅读
- windows - 为什么有些驱动器具有 FILE_ATTRIBUTE_HIDDEN 和 FILE_ATTRIBUTE_SYSTEM 属性?
- ruby-on-rails - 如何使用设计强制注销除 current_user 之外的用户
- elasticsearch - 在 elasticsearch 6.5.4 中配置 x-pack 后集群未加入
- gradle - 需要使用 Gradle 构建和更新现有 jar 文件的步骤
- apache-flink - 2 SideOutputs 行为的联合
- reactjs - 根据内容中的值重新排序 FlatList
- react-native - react-devtools 代理在 react native 与 expo 中没有任何联系
- python - 匹配选定区域的颜色
- hyperledger-fabric - 未能调用链代码契约,错误:事务返回失败:ReferenceError:bor 未定义
- unit-testing - 如何通过测试到达 catchError 运算符