对于我一个失聪和失明的朋友,我正在尝试创建一个应用程序(用于智能手表和电话),该应用程序在有人敲门铃时会警告他。智能手表会振动,这样他就知道有人在门前。
为了知道是否有人在敲门铃,我创建了一个服务器,该服务器通过套接字向手机发送消息。手机将在服务中侦听此消息,然后在收到消息时将通过数据层api将数据发送到智能手表以使其振动。
现在,我让后台服务正常工作,但是它正在使用占用大量内存的方式。几天后,我在手机上看到一条消息,说该应用程序正在使用大量内存,因此它会自动关闭该应用程序。我的问题是服务中使用了多少内存?我正在使用的套接字io库不是在后台使用吗?
(用户每隔几分钟就会断开与服务器的连接并重新连接,这种情况一直持续)
这是我创建的服务:
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;
import nl.example.messenger.Messenger;
public class SocketIOService extends Service {
private final static String mSocketUrl = "https://example.io/";
private Socket mSocket;
private Messenger mMessenger;
private final LocalBinder mBinder = new LocalBinder();
public class LocalBinder extends Binder{
public SocketIOService getService(){
return SocketIOService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
return false;
}
@Override
public void onCreate() {
super.onCreate();
initializeSocket();
addSocketHandlers();
mMessenger = new Messenger(this);
}
@Override
public void onDestroy() {
super.onDestroy();
closeSocketSession();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
private void initializeSocket() {
try{
IO.Options options = new IO.Options();
options.forceNew = true;
mSocket = IO.socket(mSocketUrl, options);
}
catch (Exception e){
Log.e("Error", "Exception in socket creation");
throw new RuntimeException(e);
}
}
private void closeSocketSession(){
mSocket.disconnect();
mSocket.off();
}
private void addSocketHandlers(){
mSocket.on("message", new Emitter.Listener() {
@Override
public void call(Object... args) {
mMessenger.sendMessage("Socket: Got a new message.");
}
});
mSocket.connect();
}
}
答案 0 :(得分:0)
您需要使用GC工具来定位内存泄漏位置。