Как запустить функцию в фоновом режиме и на переднем плане Android Studio (JAVA) - PullRequest
0 голосов
/ 02 марта 2020

У меня есть функция, мне нужно запустить эту функцию в фоновом режиме, а также на переднем плане. эта функция читает значение с сервера 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();

    }
});

1 Ответ

1 голос
/ 02 марта 2020

Вы можете использовать обработчик и runnable. Runnable позаботится о фоновой работе, а затем обработчик отправит его в поток пользовательского интерфейса.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...