jamesbone Thank you for your reply.
After getting your feedback. I started searching the latest driver of flexcan and canutils.
And finally, I found a solution to solve this problem.
Here are some links for reference:
Flexcan driver: Linux source code: drivers/net/can/flexcan.c (v4.19) - Bootlin
canutils: GitHub - linux-can/can-utils: Linux-CAN / SocketCAN user space applications
First, I porting the latest driver into my kernel. And compile the canutils into my source code.
Fortunately, everything is fine. I can have no data loss when using latest driver and canutils.
But it only worked when I ran the candump command.
After ensuring candump command had no problem, I started porting candump's code as hw_module. But I still found that had data loss. This is very depressing.
Maybe the hw_module worked in JVM. And I think the performance of JVM is not better than running the candump command directly.
I still keep thinking no matter how difficult it is. After a few hours later. Here is an idea came out my mind. What would I have if I used the socket and send the data to Application directly?
Then I started adding socket into candump.c. And create a socket server in Android Application.

Finally, it works. I can receive data without any data loss even I choose 1Mbps.
I think hw_module should be worked. Maybe there is something problem but I don't know how so.