如何在后台和前台运行函数Android Studio(JAVA)

如何在后台和前台运行函数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

我有一个函数,我需要在后台和前台运行这个函数。此函数用于从BLE服务器读取值。当我点击按钮时,它给了我更新的值,但我不想从点击中得到值。我希望它每次都运行并更新文本字段中的值

    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);