在阅读了开发人员网站和 stackoverflow 上关于 Android 服务的大部分可用文档后,我仍然对在单独的任务中运行服务的几个方面感到困惑。希望有人能让我走上正轨。
假设我们有繁琐的服务框架,例如
public class HliService extends Service {
@Override
public void onCreate() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// If we get killed, after returning from here, restart
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// We don't provide binding, so return null
return null;
}
@Override
public void onDestroy() {
}
}
在清单中,我有
<service android:name=".HliService" android:process=":HLI_Comms"/>
以便服务在自己的线程中运行。
该服务的目的是提供一个后台任务,该任务将使用 TCP 套接字与设备进行通信并执行一些其他操作。冒着忽略电池问题等的风险,基本上我希望它永远运行。
就像是
// Method that communicates using a TCP socket, and needs to send
// information back to the activity and receive messages from activity
// not shown here.
private void dummytask() {
boolean keepGoing = true;
while (keepGoing) {
// do useful stuff in here
// sets keepGoing false at some point
}
stopSelf();
}
启动此方法/任务的最佳方法是什么?
我查看了使用消息处理程序和循环器的开发人员站点中的代码,我只是部分理解,但它似乎非常复杂,也许比我需要的更多?
我不相信我可以从中调用此方法,onCreate()
或者onStartCommand()
从那时起,从系统调用时都不会完成?我应该用计时器还是闹钟启动它?
我需要添加一个消息处理程序来与 gui 活动进行通信,但是由于我在另一个线程中启动服务(通过清单“进程”指令),我是否需要使用 AIDL 来代替?
我还研究过使用 AysnchTask 而不是扩展服务,但它似乎更适合运行任务然后终止。