mar*_*ark 6 android android-service
我只是接近Android服务,但我有很多疑问.这里有一些问题.在开始之前,请注意我已阅读那些页面 Android服务(官方) 有界服务(官方) 加上我的语言的内部课程理论.请耐心等待,我仍然有点困惑.
1)首先,服务区别于AsyncTask主要是因为如果应用程序暂停(即用户正在观看另一个应用程序),它也会继续运行; 在这种情况下,AsyncTask会停止.可以,还是我错了?2)服务在通过startService()启动它的活动的同一个线程中运行.为了不影响Activity的性能,我必须为该服务创建一个单独的线程,例如实现Runnable接口.另一种方法是创建一个扩展IntentService的服务,它自动为服务提供一个新线程:在任何onHandleIntent()调用上创建一个新线程.
现在,让我们来看看我的具体问题.我需要创建一个将被许多活动使用的服务:他的任务是每隔60秒连接到服务器数据库并检查新闻.如果找到新闻,请通知新消息(如果我们在MainActivity上)或显示新消息的标题(如果我们在新闻阅读器中).我该怎么编码呢?我做了一个MainActivity来实例化一个NewsService并立即调用startService().另一方面,我有NewsService扩展IntentService,(当调用onHandleIntent时创建一个新线程?)并寻找新消息.使用IntentService是个坏主意吗?我意识到启动无限期调用startService()的服务会非常难看.在这个练习的开始我认为它是一个很好的解决方案,因为它自动创建一个新的线程,并使Service实现简单.但现在我有些疑惑(我不知道是否有新闻!MainActivity如何知道它?以及如何获得标题)
这应该使用普通的扩展Thread类来完成,它在它的run()方法中创建一个无限的cicle,每隔60秒检查一次新闻,如果有新的,则从远程DB读取标题并更新活动按钮/视图.然后,如果应用程序将被用户关闭,则服务也将关闭.但问题是,如果我正在修改这样的类,当MainActivity暂停或停止时,它的工作将停止,而其他活动(在这种情况下为NewsReader)无法获得任何更新,因为此新线程目前没有获得新闻.所以我需要一个服务.
我希望它很清楚.我该如何以正确的方式实施解决方案?请突出我的文字中的所有错误,我真的需要学习:D
你似乎已经正确理解了一切。
对于您的具体问题,我建议如下:
用于AlarmManager安排您的服务。Service不必要的时候不要让跑。
使用 aBroadcast Intent表示新消息。所有这些都Activities必须有一个内部机制BroadcastReceiver来监听Broadcast服务的意图并做出相应的反应。
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |