当我在手机上启动应用程序时,服务的onCreate会在不到一秒的时间内被调用3-4次。
另一方面,oncreate设置为启动一个线程派生类,它在logcat上打印设备的网络ip。
奇怪的是,每次调用oncreate都会随机提供实际的ip(192.168.1.xxx)或loopback(127.0.0.1)
@Override
public void onCreate() {
super.onCreate();
TheService=this;
chargingState = GetChargingState();
if(mainActivity!=null)
mainActivity.UpdateDisplay(chargingState);
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(new ChargingStateListener(),ifilter);
new NetworkHandler().findServer();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
在线程类中获取IP的函数
public String GetOwnIPAddress()
{
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}
答案 0 :(得分:1)
您对您的服务进行了错误设置。
OnCreate永远不应该启动一个线程。任何类似的事情都应该在onStartCommand或更高版本中完成。创建您的服务并不意味着它的运行,这就是onStartCommand的含义。您可以根据系统的意愿创建或终止您的服务,onCreate应该尽量减少承担。
另一方面 - 永远不要像使用TheService = this那样使用您的服务作为单身人士。它可以让你遇到各种各样的麻烦,比如查询已停止的服务。如果需要调用服务上的函数,请绑定它并在onBind中返回访问API的Binder。你正在做的事情会导致内存泄漏和崩溃。