我有一个系统覆盖窗口,像Facebook的聊天头一样的浮动视图.
问题是如果用户通过按主页按钮离开我的应用程序,则由于系统限制(https://code.google.com/p/android/issues/detail?id=4536),活动无法在5秒内启动.活动在5秒后显示.
我之前的SO问题没有找到任何解决方案.但是,有一个应用程序,Link Bubble,它克服了这个问题.当用户按下浮动气泡视图时,活动总是可以立即弹出.
有谁知道如何做到这一点?
这是我系统覆盖窗口的LayoutParams:
windowParams = new WindowManager.LayoutParams( width,height,WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,PixelFormat.TRANSLUCENT); windowParams.gravity = Gravity.TOP | Gravity.LEFT; windowParams.x = 0; windowParams.y = 0;
我得到了WindowManager
windowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
并添加浮动视图
windowManager.addView(MY_VIEW,windowParams);
其中MY_VIEW有一个OnTouchListener,在用户按下它后启动一个Activity.
解决方法
此问题的一种可能解决方法是将Home / Launcher intent过滤器添加到您尝试启动的活动.你可以通过添加它来做到这一点
<intent-filter> <!-- The following two intent-filters are the key to set homescreen --> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
执行此操作时,用户基本上可以选择将应用程序用作主屏幕.无论何时开始活动,这都将导致无延迟.这是此问题最接近无根的解决方案.
更新
另一种可能的解决方案是具有中间辅助活动,该辅助活动又具有startActivity().这将绕过5秒的延迟.确保中间活动具有透明布局,以避免混淆用户.