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 !!
精彩评论