开发者

Window Session Crash

I have the following code that add a View on top of a activity and remove it after 10 seconds.

public class MyActivity extends MainActivity {
    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);

        final ImageView view = new ImageView(this);
        view.setBackgroundColor(Color.WHITE);

        getWindowManager()
                .addView(
                        view,
                        new WindowManager.LayoutParams(LayoutParams.MATCH_PARENT,
                                LayoutParams.MATCH_PARENT));

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                view.setVisibility(View.GONE);
                getWindowManager().removeView(view);
            }
        }, 10000);

    }
}

But two things happens here: First, the ImageView is not on top of all, I even didn't seen it on the Display. Second, after 10 seconds the following error happens and the application crash

 Window Session Crash
 java.lang.NullPointerException
     at com.android.server.wm.WindowManagerService.relayoutWindow(WindowManagerService.java:2784)
     at com.android.server.wm.Session.relayout(Session.java:157)
     at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:154)
     at com.android.server.wm.Session.onTransact(Session.java:111)
     at android.os.Binder.execTransact(Binder.java:320)
     at dalvik.system.NativeStart.run(Native Method)
    FATAL EXCEPTION: main
    java.lang.NullPointerException
        at android.os.Parcel.readException(Parcel.java:1327)
        at android.os.Parcel.readException(Parcel.java:1275)
        at android.view.IWindowSession$Stub$Proxy.relayout(IWindowSession.java:616)
        at android.view.ViewRoot.relayoutWindow(ViewRoot.java:3104)
        at android.view.ViewRoot.performTraversals(ViewRoot.java:1030)
        at android.view.ViewRoot.handleMessage(ViewRoot.java:2020)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:132)
        at android.app.ActivityThread.main(ActivityThread.java:4028)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:491)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.ru开发者_开发技巧n(ZygoteInit.java:844)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
        at dalvik.system.NativeStart.main(Native Method)


So you can do something like this :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.id_mainlinearlayout);

    // final ImageView view = (ImageView) findViewById(R.id.id_imageview);
    final ImageView view = new ImageView(this);
    view.setBackgroundColor(Color.WHITE);

    linearLayout.addView(view, new WindowManager.LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            view.setVisibility(View.GONE);
            linearLayout.removeView(view);
        }
    }, 10000);

}

and in adding an id (for me : "id_mainlinearlayout") on your linearLayout in "main.xml"

It works fine for me. There is an other solution where you define your imageView in the xml and you get back with the commented line.

If you want to add your imageView at the top of your activity, you need to use a relativeLayout and place your imageView with the attribut "layout_alignParentTop".

Hope will be helpful.

Ps : sorry for my english, i'm french !!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜