为什么不能在广播接收类中通过WindowManager.addView或removeView
时间: 2023-03-31 20:02:48 浏览: 140
我不清楚您的具体情况,但是通常在广播接收类中无法使用WindowManager.addView或removeView是因为这些方法需要在UI线程中执行,而广播接收类是在后台线程中执行的。如果您需要在广播接收类中执行这些方法,可以考虑使用Handler或者在广播接收类中启动一个新的线程来执行。
相关问题
android windowmanager addview中view的生命周期
在 Android WindowManager 的 addView() 方法中添加的 View 对象与 Activity 中的 View 并不一样,在 Activity 被销毁后,View 不会随之被销毁,需要手动调用 removeView() 方法来移除。因此,View 的生命周期是由其所在的 WindowManager 来控制的,而不是由父容器 Activity 来控制的。如果想要自己控制 View 的生命周期,可以通过重写 View 的 onAttachedToWindow() 和 onDetachedFromWindow() 方法来实现。
WindowManager addview生成的view有一个button,点击button后start 新的activity,怎么让view不悬浮在新activity上
要实现这个功能,您可以在启动新Activity之前,从WindowManager中删除您添加的View。这样,当新Activity启动时,View就不会悬浮在上面了。
以下是一个实现的例子:
```
// 获取WindowManager
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// 创建一个包含Button的View
View view = LayoutInflater.from(this).inflate(R.layout.your_view_layout, null);
Button button = view.findViewById(R.id.your_button_id);
// 为Button设置点击事件,启动新Activity
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 从WindowManager中移除View
windowManager.removeView(view);
// 启动新的Activity
Intent intent = new Intent(YourCurrentActivity.this, YourNewActivity.class);
startActivity(intent);
}
});
// 将View加入到WindowManager中
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
windowManager.addView(view, layoutParams);
```
在这个例子中,当Button被点击时,首先从WindowManager中移除View,然后启动新的Activity。这样,新Activity启动后,View就不会悬浮在上面了。
请注意,如果您在新Activity中需要使用相同的View,您需要在新Activity中重新创建并添加View。
阅读全文