I need to update some UI and do it inside of the UI thread by using runOnUiThread
Now the data for the UI comes from the other Thread, represented by
You'll need to update every time your program has new Data
it wants to show. Your second code listing here is the standard way to accomplish this. There can be some catches if you're continuing to update Data
in the thread. If this is the case consider blocking the thread until the UI finishes updating or copying the data to another Data
object.
What's happening internally is that the JVM is copying the reference to the Data
object for when the anonymous class will run. Data
stored inside can still be changed. If your method requires additional changes to Data
just use another variable (object reference) such as: final Data finalData = data;
. You can also remove the line private Data sensordata = data;
and use data directly in your run method.
It may not look elegant but this is the way Java passes object variables to anonymous classes. There is newer syntax in Java Language version 7 but Android is compatible with Java Language version 5 and 6.