我想实现像。 这样的后台服务。当网络可用时,启动服务,否则,停止它包括进程 。(此应用程序没有活动)。这是我实现它的方式。
1.注册一个静态的boardcastReceiver.Listener以下的广播
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
2.在 onReceive 方法中。启动或停止服务组件的操作。
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
Intent service = new Intent(context,MonitorService.class);
boolean running = isMyServiceRunning(context);
if (null != activeNetwork) {
if (!running){
Log.i(TAG,"Network avaliable, start Service ");
context.startService(service);
}
} else {
if (running){
Log.i(TAG,"Network unavaliable, stop Service ");
context.stopService(service);
}
}
}
3.我发现真的很有趣。首先我们安装应用程序。现在它没有运行。然后我打开WiFi .logcat输出的东西,现在我很确定服务正在运行。我有一个单独的线程在服务内创建。当我禁用WiFi时。调用服务回调方法onDestory。这里我将销毁我之前创建的线程以释放资源等。
一切看起来都正常。现在服务组件停止,没有活动。但是进程仍然活着!! 我只是调用 android.os.Process.killProcess(android.os。 onDestory中的Process.myPid())。但它没有任何意义。
4.在服务中:如果服务已被系统杀死,则应自动重启。如果我自己停下来,那就不应该。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG,"onStartCommand " + flags);
return START_STICKY;
}
任何帮助都是合适的。祝你有个美好的一天。:D
添加更多============================================= ==========
我读了关于进程和threads.found的android开发者文档。 http://developer.android.com/guide/components/processes-and-threads.html
清空流程 一个不包含任何活动应用程序组件的进程。保持这种进程活着的唯一原因是缓存目的,以便在下次组件需要运行时改善启动时间。系统通常会杀死这些进程,以便在进程缓存和底层内核缓存之间平衡整个系统资源。
无论如何,我知道当我停止服务时,进程变为空进程,内存消耗减少,可能不活动。但我还是想杀了它。