创建客户端服务

时间:2014-12-28 16:12:30

标签: java android service client

我编写了一个客户端 - 服务器应用程序,其中客户端是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> 

但是当我退出应用程序时,似乎服务也被终止并且连接已关闭。

总结一下,创建服务的正确方法是什么,即使处于关闭/待机状态,也会监听消息并唤醒/与应用程序活动交互?

2 个答案:

答案 0 :(得分:0)

如果您终止该进程,则会终止所有活动和服务。服务正在后台运行,因此您无法终止进程,只需将应用程序隐藏到后台即可。

答案 1 :(得分:0)

在您的服务中尝试 START_NOT_STICKY

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_NOT_STICKY;
}