Am new to Android and trying to call invalidate function repeatedly. So i choose thread to do that. My Thread is running properly but when tried to call invalidate () its crashing Below is the code snippet.
class MyCanvas extends View {
private static final String TAG = "MY CANVAS EXAMPLE";
public MyCanvas(Context context){
super(context);
Log.e ( TAG, " MY CANVAS CONSTRUCTOR GOT CALLED ");
// TODO Auto-generated constructor stub
Thread newBackground = new Thread ( new Runnable(){
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
invalidate();
Log.e ( TAG, " MY THREAD GOT CALLED ");
// TODO Auto-generated method stub
}
});
newBackground.start();
}
@Override
protected void onDraw(Canvas canvas) {
Log.e ( TAG, " MY CANVAS GOT CALLED ");
// TODO Auto-generated method stub
super.onDraw(canvas);
}
}
and below is the crash log observed
09-23 17:41:09.299: E/MY CANVAS EXAMPLE(1839): MY CANVAS CONSTRUCTOR GOT CALLED
09-23 17:41:09.599: E/MY CANVAS EXAMPLE(1839): MY CANVAS GOT CALLED
09-23 17:41:10.329: W/dalvikvm(1839): threadid=9: thread exiting with uncaught exception (group=0x40018578)
09-23 17:41:10.329: E/AndroidRuntime(1839): FATAL EXCEPTION: Thread-10
09-23 17:41:10.329: E/AndroidRuntime(1839): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
09-23 17:41:10.329: E/AndroidRuntime(1839): at android.view.ViewRoot.checkThread(ViewRoot.java:3020)
09-23 17:41:10.329: E/AndroidRuntime(1839): at android.view.ViewRoot.invalidateChild(ViewRoot.java:647)
09-23 17:41:10.329: E/AndroidRuntime(1839): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:673)
09-23 17:41:10.329: E/AndroidRuntime(1839): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2511)
09-23 17:41:10.329: E/AndroidRuntime(1839): at android.view.View.invalidate(View.java:5279)
09-23 17:41:10.329: E/AndroidRuntime(1839): at com.example.canvas.MainActivity$MyCanvas$1.run(MainActivity.java:83)
09-23 17:41:10.329: E/AndroidRuntime(1839): at java.lang.Thread.run(Thread.java:1019)