我有一个后台服务,负责检查服务器的更新。
服务启动AsyncTask,负责实际检查和下载更新。
然后我发起了一个意图,要求用户安装或取消安装
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(newFile(SystemConstants.UPDATE_DOWNLOAD_PATH+fileName)),"application/vnd.android.packagearchive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
在Activity
我会startActivityForResult
,但由于service
已启动请求,因此我很难确定如何等待用户响应。
我怎样才能在AsyncTask中等到用户选择了一个动作?
由于
答案 0 :(得分:1)
我很难弄清楚如何等待用户回复
如果您需要反馈,那么您的服务不应直接触发此意图。相反,你应该拥有"中间人"在你的应用程序中,很可能是另一个活动,一旦服务告诉它这样做,它将触发该意图。由于这是常规活动,因此您可以使用startActivityForResult()
然而,我认为您应该阅读event bus concept(GreenRobot' s,OTTO,Guava' s),因为这可能对您的应用内通信有所帮助。
答案 1 :(得分:1)
首先,在后台开始下载对我来说似乎是一种不好的做法,除非它的大小非常小。应该让用户知道有升级并询问是否可以继续。
除此之外,我认为你应该使用Notification
和PendingIntent
。当用户点击您的通知时,您的待处理意图只会打开Activity
,以启动您的startActivityForResult()
。
如果此检查是定期任务,请确保使用JobScheduler
来优化电池使用情况,并避免操作系统终止您的服务。