我目前正在尝试设计一个特定的应用程序,但我真的不知道怎么做。应用程序必须像这样运行。
我要做的是:
用户启动应用程序。此操作启动独立于 UI(当前服务)的操作,即使应用程序的 UI 不在屏幕上,UI也必须请求远程服务器以获取测试方案、执行测试并将结果发送到同一服务器。
第二个约束:用户在开始时选择来自服务器的两个场景请求之间的时间。
示例:
用户启动应用程序,选择"每 5 分钟执行一次测试场景请求",之后,他可以在手机上做任何他想做的事情。并且应用程序每5分钟发送一次请求以获取测试场景(不是一个,而是各种数字,例如50),做测试场景,并将结果发送到服务器;然后,等待下一个请求。
在此期间,我认为状态栏中的通知图标可能是访问应用程序 UI 的好事。这样,当用户觉得应用已经完成了足够的测试时,他可以访问 UI 并停止应用。
我已经做了什么:
我创建了一个创建服务的活动。我还用AlarmManager
设置了一个闹钟,收到一个AlarmReceiver
,每 X 分钟/秒/...并在服务中启动对服务器的请求以获取方案(HTTP 请求在 AsyncTask 中完成)。该服务在其onCreate()
方法的状态栏中放置通知。我还设法解析了JSON,发送了HttpRequest以及诸如此类的技术性内容。
我的问题是什么:
我发现服务在onStartCommand()
结束时自行停止。它完成了方法,然后转到onDestroy()
(我不放stopSelf()
),但是服务真的关闭了吗?如果是,我怎么能在申请的所有期间设法让它"启动"?
状态栏中的通知刚刚出现并消失,并带有AlarmManager
给出的 rythme。我怎样才能"稳定"它?
如果您已经设计了这样的应用程序(我认为邮件应用程序就是一个很好的例子,它每 X 分钟请求邮件服务器检查新邮件并发送通知),我如何才能达到我的目标?重用邮件应用程序示例:检查服务器上新邮件的服务是否始终在运行?
我真的不知道如何设计这个应用程序之王,所以欢迎任何帮助。对不起,我的英语不好。如果你想要精度,服务代码,活动,就问。
问候
看起来您的Service
正在 UI 线程上运行。您应该在Service
内创建一个新线程,所有网络操作都将在其中工作。因此,不需要AlarmManager
- 只需在您的Thread
内wait
X 毫秒.
附言如果您不知道如何创建新线程:
new Thread(new Runnable(){
public void run(){
//your code here
}
}).start();
但我强烈建议您先阅读有关多线程的信息。