Android服务重新启动多次

问题描述:

当我在手机上启动应用程序时,服务的onCreate在不到一秒内被调用3-4次。Android服务重新启动多次

另一方面,oncreate被设置为启动一个线程派生类,该类可以在logcat上打印设备的网络IP。

古怪每次调用OnCreate中随机给出任何实际的IP(192.168.1.xxx)或回送(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; 

    } 

您正在对您的服务进行misarchitecture。

OnCreate永远不应该启动一个线程。任何这样的事情都应该在onStartCommand或更高版本中完成。创建您的服务并不意味着它的运行,这就是onStartCommand的含义。您的服务可能会根据系统的意愿而创建或中止,onCreate应该尽量减少。

在旁边注意 - 不要像使用TheService = this一样将您的服务用作单例。它会让你陷入各种麻烦,比如查询停止的服务。如果您需要调用服务上的函数,请绑定到它并在onBind中返回一个访问您的API的Binder。你在做什么会导致内存泄漏和崩溃。

+0

感谢移动东西到onStartCommand工作,但由线程打印的地址现在卡在环回地址127.0.0.1,但这应该是它自己的问题 – Allahjane

+0

嗯,这实际上并不错 - 本地主机的IP是127.0.0.1 :)请参阅http://*.com/questions/6064510/how-to-get-ip-address-of-the-device获取它的其他方式 –