我编写了一个客户端 - 服务器应用程序,其中客户端是Android应用程序,服务器端是用纯java编写的。
我想做的是在客户端应用上创建服务。这个服务应该始终监听来自服务器的消息(显然是在不同的线程上,而不是主要的 - 在主线程上运行服务的重点是什么?)并且能够发送响应,即使在应用程序处于待机或关闭状态(与Whatsapp或Facebook接收消息的方式相同,即使应用程序已关闭)。
该服务将通过广播意图来与活动进行通信,活动将通过BroadcastReceiver
收听。
我所做的是实施:
public class ServerProxy extends Service
public void startClientActionListener() {
new Thread() {
public void run() {
MessageToClient msgTC;
try {
while ((msgTC = (MessageToClient) genConnection
.getMessage()) != null) {
EventReport eventReport = msgTC
.doClientAction(serverProxy);
Intent i = new Intent(Event.EVENT_ACTION);
i.putExtra("eventreport", eventReport);
sendBroadcast(i);
}
}
}
侦听来自服务器的传入消息。
我还将其添加到AndroidManifest.xml:
<service
android:enabled="true"
android:name="com.android.services.ServerProxy" >
</service>
<intent-filter>
<action android:name="com.android.services.ServerProxy" />
</intent-filter>
但是当我退出应用程序时,似乎服务也被终止并且连接已关闭。
总结一下,创建服务的正确方法是什么,即使处于关闭/待机状态,也会监听消息并唤醒/与应用程序活动交互?
答案 0 :(得分:0)
如果您终止该进程,则会终止所有活动和服务。服务正在后台运行,因此您无法终止进程,只需将应用程序隐藏到后台即可。
答案 1 :(得分:0)
在您的服务中尝试 START_NOT_STICKY 。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_NOT_STICKY;
}