Update android Textview continuously

前端 未结 4 1050
执笔经年
执笔经年 2021-01-22 12:27

I am working on an Android Application which have an one activity class and service class. In service, Continuous bulk data (1090 by

相关标签:
4条回答
  • 2021-01-22 12:42

    Use handler beacuse A Handler allows communicating back with UI thread from other background thread.

    boolean handlerStop = false;
    
        void handleHandler(){
            Handler handler =new Handler();
            final Runnable r = new Runnable() {
                public void run() {
                    handler.postDelayed(this, 30000);
                    if(!handlerStop) {
                        updateTextView() //update your text with other thread like asyncronous thread
                    }
                }
            };
            handler.postDelayed(r, 0000);
        }
    
        @Override
        public void onResume() {
            super.onResume();
            handlerStop=false;
            handleHandler();
        }
    
        @Override
        public void onPause() {
            super.onPause();
            handlerStop=true;
            handleHandler();
        }
    
        @Override
        public void onStop() {
            super.onStop();
            handlerStop=true;
            handleHandler();
        }
    
    0 讨论(0)
  • 2021-01-22 12:46

    If you want to use Schedule and timer task then you can See My Answer

    To solve current issue follow this bellow instructions. Suppose your activity has a Broadcast Receiver

    private BroadcastReceiver mReceiver;
    

    Then you override methods onResume() where your broadcast receiver will be registered and also onPause() where will your receiver be unregistered:

    @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
    
            IntentFilter intentFilter = new IntentFilter(
                    "android.intent.action.MAIN");
    
            mReceiver = new BroadcastReceiver() {
    
                @Override
                public void onReceive(Context context, Intent intent) {
                    //extract your message from intent
                    String msg_for_me = intent.getStringExtra("YOUR_MESSAGE");
                    //log your message value
                    Log.i("MyTag", msg_for_me);
    
                }
            };
            //registering your receiver
            this.registerReceiver(mReceiver, intentFilter);
        }
    
        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
            //unregister your receiver
            this.unregisterReceiver(this.mReceiver);
        }
    

    Here the broadcast receiver is filtered via android.intent.action.MAIN and from Service the message will BroadCast using this filter

    Now your Method Receivepatientattributes will like this :

    public void Receivepatientattributes(byte[] readBuf, int len) {
    
        String total_data = "";
        total_data = bytetohex(readBuf, len);
    
        Intent i = new Intent("android.intent.action.MAIN").putExtra("YOUR_MESSAGE",  total_data);
        this.sendBroadcast(i);
    
    }
    

    Thats it. :)

    0 讨论(0)
  • 2021-01-22 12:55

    You can use Timer for Continously updating your textview.

    Set value in preferences every time when your service is running with the latest value.

    Now in Timer get that value from preferences and update your TextView with that value.

    Here is some code :

    class UpdateTimeTask extends TimerTask {
       public void run() {
    
       textview.setText("updated value");
       }
    }
    

    Set in onCreate ();

        Timer timer = new Timer();
        UpdateTimeTask  UpdateTimeTask = new UpdateTimeTask ();
        timer.schedule(UpdateTimeTask, 1000);
    
    0 讨论(0)
  • 2021-01-22 12:58

    User LocalBroadcastManager

    public void Receivepatientattributes(byte[] readBuf, int len) {
        String total_data = "";
        total_data = bytetohex(readBuf, len);
    
        Intent intent = new Intent("update-text");
        // add data
        intent.putExtra("message", total_data);
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    }
    

    In MainActivity

    @Override
    public void onResume() {
      super.onResume();
    
      // Register mMessageReceiver to receive messages.
      LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
          new IntentFilter("update-text"));
    }
    
    private boolean mCanBeUpdated = true;
    private static final int ONE_SEC = 1000; //ms
    private static final int RECEPTION_SPEED = 10; //ms
    private static final int CYCLES = (int) (ONE_SEC / RECEPTION_SPEED);
    private int mCurrentCycle = -1;
    private String mMsgCache = "";
    
    // handler for received Intents for the "update-text" event 
    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Extract data included in the Intent
            String message = intent.getStringExtra("message");
            Log.d("receiver", "Got message: " + message);
    
            mMsgCache = mMsgCache + "\t" + message;
    
            if (mCanBeUpdated) {
                // No problem updating UI here, refer --> http://stackoverflow.com/a/5676888/1008278
                final Handler handler = new Handler(context.getMainLooper());
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        MainActivity.recep.append(mMsgCache);
                        mMsgCache = "";
                    }
                });
    
                mCanBeUpdated = false;
            } else if (mCurrentCycle >= CYCLES) {
                mCurrentCycle = -1;
                mCanBeUpdated = true;
            } else {
                mCurrentCycle++;
            }
        }
    };
    
    @Override
    protected void onPause() {
      // Unregister since the activity is not visible
      LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
      super.onPause();
    } 
    

    Reference

    0 讨论(0)
提交回复
热议问题