我正在为套接字连接创建绑定服务。这意味着它正在创建一个长轮询连接并监听我的服务器。如果用户关闭任务管理器中的应用程序我的服务正在查杀我没有问题。但是当用户按下时后退按钮我正在调用activity.finish()
方法来关闭app.But使用这种方法我的服务没有杀死,它仍然连接到套接字服务器。
这是正常的吗?这可能会耗尽电池吗?
我的服务:
public class SocketService extends Service {
//you need constants to tell servise and activity what you are sending a message for
public static final int REGISTER_CHAT_ACTIVITY = 1;
public static final int MESSAGE_RECEIVED = 2;
final Messenger mMessenger = new Messenger(new IncomingHandler());
Messenger chat;
private Socket socket;
@Override
public void onCreate() {
try {
socket = IO.socket("ip");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
}
}).on("connected", new Emitter.Listener() {
@Override
public void call(Object... args) {
}
}).on("message", new Emitter.Listener() {
@Override
public void call(Object... args) {
try {
chat.send(android.os.Message.obtain(null, MESSAGE_RECEIVED, args[0]));
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//and add all the other on listeners here
socket.connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (socket != null) {
socket.disconnect();
socket.connect();
} else {
try {
socket = IO.socket("ip");
socket.connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
class IncomingHandler extends Handler {
@Override
public void handleMessage(android.os.Message msg) {
switch(msg.what){
case REGISTER_CHAT_ACTIVITY:
chat = msg.replyTo;
break;
}
}
}
public class LocalBinder extends Binder {
SocketService getService() {
return SocketService.this;
}
}
}
答案 0 :(得分:0)
前段时间我有类似的东西,我通过使用共享偏好解决了这个问题。(注意:我不认为它是最好的答案,但它解决了我的问题)
我在偏好设置中保存了一个布尔值,以便在我不再需要服务时注册,但丢失了对它的引用。
public class YourService extends Service {
private YourService serv;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
serv = this;
然后,您的代码会发现该服务经常运行。
if(!sharedPref.getBoolean("TurnOffService", false)){
serv.stopSelf();
}
希望它有所帮助。