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

How to run a function in the background as well as in the foreground Android Studio(JAVA)

我有一个功能,我需要 运行 这个功能在后台和前台。此函数从 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();

                }
            });
        }

    }

创建方法:

btnread.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        readData();

    }
});

您可以使用处理程序和可运行对象。 runnable 将负责后台工作,然后处理程序将 post 它交给 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);

您可以查看这部分文档:https://developer.android.com/training/multiple-threads/communicate-ui