我正在开发一个运行的应用程序,它具有可以接收紧急情况的基本UI和服务。如果用户在UI中并按下主页或返回,则会显示通知并继续运行服务。如果服务收到紧急情况,我想将活动打开到用户界面。为此,我必须在服务中使用带有Intent标志FLAG_ACTIVITY_NEW_TASK的startActivity。
但这意味着,如果UI仍在后台运行,则不会重新打开。从那时起,我的许多UI交互似乎都发生在旧的隐藏UI上,而不是新的UI。此外,如果我关闭当前的UI,我有时会在它后面有旧的UI。
我希望通过一项服务,我可以将旧的ui带到前面或打开一个新的,具体取决于旧的UI是否仍在运行。
我尝试将FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK一起使用以清除UI的任何其他实例,然后在新任务中打开UI,但CLEAR_TASK是API 11及更高版本;我的应用支持10。
对此有任何帮助表示赞赏。
答案 0 :(得分:1)
我对此做的是在活动的bindService
中执行onResume
(以便获取Service
实例),然后向Service
添加方法从Handler
接收Activity
实例的实例。在onPause
中,您将Handler
上的Service
设置为null。这样Service
知道(通过检查其内部Handler
实例)是否已有可用的UI。如果有,它会发送事件发生的Handler
Message
。如果没有Handler
,则会启动新的用户界面。
答案 1 :(得分:0)
您可以尝试在清单文件中选择启动模式“singleTask”:
<activity
android:name=".MainActivity"
android:launchMode="singleTask" >
使用“singleTask”启动模式,您的活动只会实例化一次。