3

我目前正在尝试设计一个特定的应用程序,但我真的不知道如何。该应用程序必须像这样运行。

我必须做的:

用户启动应用程序。这个动作启动了一些独立于 UI 的东西(当前是一个服务),它必须请求远程服务器来获取测试场景、执行测试并将结果发送到同一服务器,即使应用程序的 UI 不在屏幕上。

第二个约束:用户在开始时选择来自服务器的两个场景请求之间的时间。

示例:用户启动应用程序,选择“每 5 分钟执行一次测试场景请求”,之后,他可以在手机上做任何他想做的事情。并且app每5分钟发送一个请求来获取测试场景(不是一个,而是一个不同的数字,例如50),做测试场景,并将结果发送到服务器;然后,等待下一个请求。
在此期间,我认为状态栏中的通知图标可能是访问应用程序 UI 的好方法。这样,当用户觉得应用程序已经完成了足够的测试时,他可以访问 UI 并停止应用程序。

我已经做了什么:

我创建了一个创建服务的活动。我还设置了一个警报AlarmManager,收到一个警报,该警报AlarmReceiver每 X 分钟/秒/...调用一次服务,并在服务中启动对服务器的请求以获取场景(http 请求在 AsyncTask 中完成)。该服务在其onCreate()方法的状态栏中放置一个通知。我还设法解析 JSON、发送 HttpRequest 以及类似的技术性内容。

我的问题是:

我发现服务在onStartCommand(). 它完成了方法然后转到onDestroy()(我没有放的地方stopSelf()),但是服务真的关闭了吗?如果是的话,我怎么能在整个申请期间设法让它“启动”?

状态栏的通知刚出现又消失,伴随着AlarmManager. 我怎样才能“稳定”它?

如果你已经设计了一个这样的应用程序(我认为一个邮件应用程序就是一个很好的例子,它每 X 分钟请求邮件服务器检查新邮件并发送通知),我怎样才能达到我的目标?重用邮件应用程序示例:检查服务器上新邮件的服务是否一直在运行?

我真的不知道如何设计这个应用之王,所以欢迎任何帮助。对不起,我的英语不好。如果您想要精度、服务代码、活动,请询问。

问候

4

1 回答 1

1

看起来您Service正在 UI 线程上运行。您应该在您的内部创建一个新线程Service,所有网络操作都将在其中工作。因此,AlarmManagerwaitThread.

PS如果您不知道如何创建新线程:

new Thread(new Runnable(){
    public void run(){
        //your code here
    }
}).start();

但我强烈建议您先阅读有关多线程的内容。

于 2012-06-15T10:17:56.853 回答