Wednesday, 15 September 2021

Android Looper is delaying message dispatch due to FrameHandler

The application that I'm working on is receiving data at a very high rate (every 100ms). The data is received by the background thread and I need to display it on the activity.

I am using handler to post data from the background thread to main thread. But after some time we start to see the delay.

Delay

The background thread is receiving and posting data to handler at 100ms interval. But the main thread looper get busy in waiting for FrameHandler to finish its job. Due to which my messages gets processed with delay. And this delay keeps increasing.

Below are the looper log:

com.example.app.MainActivity$4 - is my app's custom handler

android.view.Choreographer$FrameHandler - OS frame handler

09-08 14:52:02.465 15397 15397 D MAIN_LOOPER: >>>>> Dispatching to Handler (com.example.app.MainActivity$4) {3b4862a} null: 102

09-08 14:52:02.467 15397 15397 D MAIN_LOOPER: <<<<< Finished to Handler (com.example.app.MainActivity$4) {3b4862a} null

My app took 2ms to progress a data

09-08 14:52:02.467 15397 15397 D MAIN_LOOPER: >>>>> Dispatching to Handler (android.view.Choreographer$FrameHandler) {6eab416} android.view.Choreographer$FrameDisplayEventReceiver@3d19197: 0

09-08 14:52:06.080 15397 15397 D MAIN_LOOPER: <<<<< Finished to Handler (android.view.Choreographer$FrameHandler) {6eab416} android.view.Choreographer$FrameDisplayEventReceiver@3d19197

FrameHandler took 4 secs to finish processing.

09-08 14:52:06.080 15397 15397 D MAIN_LOOPER: >>>>> Dispatching to Handler (com.example.app.MainActivity$4) {3b4862a} null: 102

09-08 14:52:06.083 15397 15397 D MAIN_LOOPER: <<<<< Finished to Handler (com.example.app.MainActivity$4) {3b4862a} null

How can we reduce the time taken by frame handler or any alternative to post data from background thread to main thread?



from Android Looper is delaying message dispatch due to FrameHandler

No comments:

Post a Comment