Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 永不结束的背景线程?_Android_Multithreading_Android Asynctask_Timertask - Fatal编程技术网

Android 永不结束的背景线程?

Android 永不结束的背景线程?,android,multithreading,android-asynctask,timertask,Android,Multithreading,Android Asynctask,Timertask,我目前有一个从web服务器创建时填充的listview。我希望它定期轮询数据库以获取更新,或者允许php脚本更新它。我更希望它由数据库更新,而不是轮询 就轮询而言,我知道我可以实现服务或异步线程。我还找到了timertask类 对于AsyncThread:我可以让它连续重复吗?我会从调用.start方法吗 对于TimerTask:这比异步线程或服务的效率低吗 我还需要在线程内部创建TimerTask吗?或者它会创建自己的线程?试图将服务器变成客户机,将客户机变成服务器,就像试图通过错误的孔口进食

我目前有一个从web服务器创建时填充的listview。我希望它定期轮询数据库以获取更新,或者允许php脚本更新它。我更希望它由数据库更新,而不是轮询

就轮询而言,我知道我可以实现服务或异步线程。我还找到了timertask类

对于AsyncThread:我可以让它连续重复吗?我会从调用.start方法吗

对于TimerTask:这比异步线程或服务的效率低吗


我还需要在线程内部创建TimerTask吗?或者它会创建自己的线程?

试图将服务器变成客户机,将客户机变成服务器,就像试图通过错误的孔口进食一样。这是在与原始设计的本质作斗争

一方面,你不能依赖你的应用程序持续运行,不管怎样,你不能依赖手机。手机上的应用程序优先级较低。手机上的应用程序使用的能量有限。手机上的应用程序也并非总是能够连接到互联网


因此,首先,您需要在自己的线程上使用服务(如果愿意,可以使用AsyncTask)。您的服务将需要自己的线程,这样它就不会阻塞等待响应的UI线程。您还需要使用AlarmManager根据需要唤醒或终止您的服务(因为您的服务肯定会被终止几次,而不是因为它本身的错误)。

尝试将服务器变成客户机,将客户机变成服务器,就像尝试通过错误的孔口进食一样。这是在与原始设计的本质作斗争

一方面,你不能依赖你的应用程序持续运行,不管怎样,你不能依赖手机。手机上的应用程序优先级较低。手机上的应用程序使用的能量有限。手机上的应用程序也并非总是能够连接到互联网


因此,首先,您需要在自己的线程上使用服务(如果愿意,可以使用AsyncTask)。您的服务将需要自己的线程,这样它就不会阻塞等待响应的UI线程。您还需要使用AlarmManager根据需要唤醒或终止您的服务(因为您的服务肯定会被杀死几次,而不是因为它本身的错误)。

您了解Web服务器的工作原理吗?它们不是为从服务器更新客户端而设计的。也有这样的项目,但Web服务器是被设计用来进行轮询的。是的,我也很理解,并接受我必须进行轮询,但我想确定,因为这是一个我没有经验的领域,我只想在服务中添加代码,它仍然与调用活动在同一线程中运行。Commonware所建议的IntentService确实在单独的工作线程中运行任务,这是一个不错的选择。我知道这有点晚了,但为了未来读者的利益,总是可以选择推送通知。我们在服务器上使用一个cronjob来运行一个php脚本,该脚本每x次向所有在线用户发送一个推送通知。您了解Web服务器是如何工作的吗?它们不是为从服务器更新客户端而设计的。也有这样的项目,但Web服务器是被设计用来进行轮询的。是的,我也很理解,并接受我必须进行轮询,但我想确定,因为这是一个我没有经验的领域,我只想在服务中添加代码,它仍然与调用活动在同一线程中运行。Commonware所建议的IntentService确实在单独的工作线程中运行任务,这是一个不错的选择。我知道这有点晚了,但为了未来读者的利益,总是可以选择推送通知。我们在服务器上使用cronjob来运行php脚本,该脚本每x次向所有在线用户发送推送通知。我建议使用
IntentService
AlarmManager
,因此,当服务没有主动向用户提供价值时,它可能会脱离RAM。当你说服务将被终止时,我理解这一点,那么我应该为其alarmmanager设置任意长度吗?比投票率还要长?另外,android开发者网站指出,对于不需要精确时间的正常计时操作,alarmmanager的效率低于处理器,所以你们为什么建议通过处理器来实现这一点?Stephan,当我继续说我不是指每毫秒,我指的是像每30秒重复轮询这样的事情,其中,只要一次轮询尝试完成,计时器就会持续运行,直到下一次开始。alarmmanager是否能够检查服务是否已在运行,以便在未终止服务时不会生成第二个服务实例?此外,关于我的上述评论,我的意思是,我不会不尊重您的建议,即与
AlarmManager
一起使用
IntentService
,这样当该服务无法主动向用户提供价值时,该服务可以脱离RAM。当您说该服务将被终止时,我理解,那么我应该为它的alarmmanager设置任意长度吗?比投票率还要长?另外,android开发者网站指出,对于不需要精确时间的正常计时操作,alarmmanager的效率低于处理器,所以你们为什么建议通过处理器来实现这一点?Stephan,当我继续说我不是指每毫秒,我指的是像每30秒重复轮询这样的事情,其中,只要一次轮询尝试完成,计时器就会持续运行,直到下一次开始。alarmmanager是否能够检查服务是否已在运行,以便在未终止服务时不会生成第二个服务实例?关于我的上述评论,我没有不尊重的意思