如何在后台和前台运行函数Android Studio(JAVA)
我有一个函数,我需要在后台和前台运行这个函数。此函数用于从BLE服务器读取值。当我点击按钮时,它给了我更新的值,但我不想从点击中得到值。我希望它每次都运行并更新文本字段中的值如何在后台和前台运行函数Android Studio(JAVA),java,android,bluetooth-lowenergy,Java,Android,Bluetooth Lowenergy,我有一个函数,我需要在后台和前台运行这个函数。此函数用于从BLE服务器读取值。当我点击按钮时,它给了我更新的值,但我不想从点击中得到值。我希望它每次都运行并更新文本字段中的值 public void readData(){ if(manager.getConnectedDevices().size()<=0){ Toast.makeText(ModeFragment.this.getActivity(),"No connected devic
public void readData(){
if(manager.getConnectedDevices().size()<=0){
Toast.makeText(ModeFragment.this.getActivity(),"No connected devices", Toast.LENGTH_LONG).show();
return;
}
device1 = manager.getConnectedDevices().get(0);
Map<String , String> reciveData = getSpecificServiceInfo(device1 , CHARACTERISTIC_READABLE);
for (Map.Entry<String, String> e : reciveData.entrySet()){
manager.read(device1, e.getKey(), e.getValue(), new BleReadCallback() {
@Override
public void onRead(byte[] data, BleDevice device) {
Toast.makeText(ModeFragment.this.getActivity(), "Read success! data: " + new String(data), Toast.LENGTH_LONG).show();
// String str = data.toString();
// List<String> data1 = Arrays.asList(str.split(","));
textView.setText(new String(data));
intent.putExtra("data" , new String(data));
}
@Override
public void onFail(int failCode, String info, BleDevice device) {
// Toast.makeText(ModeFragment.this.getActivity(), "Read fail! data: " + info, Toast.LENGTH_LONG).show();
}
});
}
}
您可以使用处理程序和runnable。runnable将负责后台工作,然后处理程序将其发布到UI线程
Handler mainHandler = new Handler(getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {....} // This is the work to do on the background
};
mainHandler.post(myRunnable);
您可以查看文档的这一部分:我不确定我是否理解您的意思。runnable是否从onCreate中获取变量?否则,只需添加mainHandler.post(myRunnable);在onCreate方法中;处理程序和runnable是变量。这些值来自一个服务器。我只想在后台和前台运行这个。每次我试着这么做时,它都会更新文本视图,但它给出了一个错误。错误:不兼容的类型:无法转换为可运行的mHandler.postDelayed(此,5000);
Handler mainHandler = new Handler(getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {....} // This is the work to do on the background
};
mainHandler.post(myRunnable);