我们从一个启动服务的活动开始,然后变得空闲,直到服务再次调用该活动。该活动进入onPause(我相信)并且在其BroadcastReceiver得到它的启动调用之前不会启动备份。我的服务创建一个 WindowManager 作为系统覆盖,当用户触发它时,它应该调用活动并使活动创建一个包含一些内容的新视图。好吧,一切都顺利进行,没有弹出错误,我所有的日志都表明代码运行顺利,但是应该制作的新视图永远不会出现。不过有趣的是,如果您单击该应用程序再次启动它,则会弹出我之前想要的视图。所以我很好奇为什么它没有在我想要的时候发生,而是它仍然是不可见的。我尝试将视图设置为可见,尝试了bringToFront(),我什至尝试了一些标志来将活动带到堆栈的顶部,但这些都不起作用。相关代码如下。
我不是来听你为什么不认为我的应用程序对用户有好处,或者你不认为它遵循 android 的基本“设计”的原因,我只是想帮助调试这个有趣的错误。
主要活动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(MainActivity.this, MyService.class);
startService(intent); //if i comment out these lines and add the call
initService(); //to figureOutParam below it works perfectly
sendUserHome(); //this one as well
figureOutParam("UPDATE",0); //this is the call that i use to get through to
//the method though right now neither param is important
}
public void figureOutParam(String param, int top){
if(param.equals("UPDATE")){
View myView = new View(this);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
myView = inflater.inflate(R.layout.activity_main, null);
myView.setBackgroundColor(Color.BLUE);
myView.bringToFront();
setContentView(myView);
}
}
MyService(仅涉及回调服务的重要部分)
@Override
public void onCreate() {
super.onCreate();
WindowManager window = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display d = window.getDefaultDisplay();
int width=d.getWidth();
int height=d.getHeight();
height= (int)(height*.025);
params = new WindowManager.LayoutParams(WindowManager.LayoutParams.FILL_PARENT,height,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity=Gravity.BOTTOM;
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
}
public void updateView(String params){
Intent i = new Intent(MY_INTENT);
i.putExtra("y", this.y);
i.putExtra("param", params);
sendBroadcast(i);
}
表明因为,好吧,因为