我正在尝试创建一个服务来检查设备是否有活动的互联网连接并报告它。我完全不知道我的代码有什么问题。
我知道这个问题已经被问过很多次了,但是大多数答案,像这样,状态
现在据我所知,我避免了上述原因。这是我的简化代码:
我的活动
public MyActivity extends SuperActivity { // No properties are instantiated // No onCreate(Bundle) method }
超级活动
public SuperActivity extends Activity { ApplicationManager appMgr; UIManager uiMgr; // No properties are instantiated, only declared @Override public void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); this.appMgr = new ApplicationManager(this); this.appMgr.getUIManager().init(); } }
应用程序管理器
public ApplicationManager { // No properties are instantiated SuperActivity activity; Thread serviceThread; UIManager uiMgr; ApplicationManager(SuperActivity activity) { this.activity = activity; this.uiMgr = new UIManager(this); } void initService() { this.serviceThread = new Thread(new Runnable() { @Override public void run() { Intent intent = new Intent(getActivity(), ConnectionService.class); intent.putExtra("CONTEXT", getActivity()); intent.putExtra("ALLOW_MOBILE_CONNECTION", true); getActivity().startService(intent); } }); } void startService() { this.serviceThread.start(); } UIManager getUIManager() { return this.uiMgr; } SuperActivity getActivity() { return this.activity; } }
用户界面管理器
public class UIManager { // No properties are instantiated void init() { getApplicationManager().initService(); getApplicationManager().startService(); // <-- FIRST MARKER, // see below } }
连接服务
public class ConnectionService { @Override protected Bundle onHandleIntent(Intent intent) { Bundle params = intent.getExtras(); Bundle bundle = new Bundle(); Context cntxt = (Context) params.getSerializable("CONTEXT"); try { boolean wifi = NetworkUtils.hasWifiCon(cntxt); // <-- SECOND MARKER, // see below ... } catch (SocketException exc) { ... } return bundle; } }
错误发生在由 SECOND MARKER 表示的行上,该行获取系统连接服务并检查 wifi。这是之前不允许调用的服务onCreate()
。
此外,如果我删除或注释 FIRST MARKER 表示的行,错误就消失了,当然,服务也没有启动。
可能是什么问题呢?