I'm trying to create a thread with a looper and an handler in ViewRootImpl.java but I'm getting this error:
02-03 14:04:14.266   884   884 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.sendMessage(android.os.Message)' on a null object reference
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1344)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1150)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6076)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.view.Choreographer.doCallbacks(Choreographer.java:670)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.view.Choreographer.doFrame(Choreographer.java:606)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.os.Handler.handleCallback(Handler.java:739)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:95)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:148)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at com.android.server.SystemServer.run(SystemServer.java:283)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at com.android.server.SystemServer.main(SystemServer.java:168)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
02-03 14:04:14.266   884   884 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-03 14:04:14.348   884   884 I Process : Sending signal. PID: 884 SIG: 9
My code is in performTraversals function and just send messages between the threads. Here is my code:
The classes:
public class Viewhandler extends Handler{
    Viewhandler(){}
    @Override
    public void handleMessage(Message msg) {
        Log.v("Viewhandler","msg-" + msg.arg1);
    }
}
public class Vthread extends Thread{
    Viewhandler mViewhandler;
    Handler mhandler;
    Vthread(Viewhandler handler){
        mViewhandler = handler;
    }
    @Override
    public void run(){
        Looper.prepare();
        mhandler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                Log.v("Vthread","msg-" + msg.arg1);
                Message mes = Message.obtain();
                mes.arg1 = 2000;
                mViewhandler.sendMessage(mes);
            }
        };
       Looper.loop();
    }
}
The code in performTraversals function:
if(mViewhandler == null){
    Log.v(TAG, "viewhandler");
    mViewhandler = new Viewhandler();
}
if(mVthread == null){
    Log.v(TAG, "vthread");
    mVthread = new Vthread(mViewhandler);
    mVthread.start();
}
Log.v(TAG, "message");
Message msg = Message.obtain();
msg.arg1 = 1000;
mVthread.mhandler.sendMessage(msg);
Am I not able to create threads in this file?
Another questions: Does each application have its own copy of frameworks? How does this work for android frameworks?
Thanks
 
    