这是我的服务,此服务检查WiFi连接:
view.leadingAnchor
我在App扩展应用程序
类中启动了此服务public class WiFiService extends Service {
private final static int INTERVAL = 1000 * 60 * 2;
// public Handler handler = null;
public static Runnable runnable = null;
final Handler handler = new Handler();
final long delay = 2 * 10 * 1000;
@Override
public void onCreate() {
super.onCreate();
executeSomething();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
handler.removeCallbacks(runnable);
Log.e("destroyed " , " kill ");
}
void executeSomething() {
handler.postDelayed(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "a" , Toast.LENGTH_LONG).show();
WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if (wifi.isWifiEnabled()) {
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
String ssid = info.getSSID();
Toast.makeText(getApplicationContext(), ssid, Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext() , "Nie jest właczone" , Toast.LENGTH_LONG).show();
String ssid = "AndroidAP";
String key = "iawu7483";
WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = String.format("\"%s\"", ssid);
wifiConfig.preSharedKey = String.format("\"%s\"", key);
WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
wifiManager.setWifiEnabled(true);
int netId = wifiManager.addNetwork(wifiConfig);
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();
}
executeSomething();
}
}, delay);
}
}
但是当我杀死我的应用程序时,我发现这项服务一直都有效。我怎么能完成这项服务?当我运行我的应用程序时,又开始了一次
答案 0 :(得分:1)
当您终止应用程序时,将调用Service的onTaskRemoved()方法。
您可以从该方法停止服务任务。 您可以再次从启动活动开始提供服务。
我希望它有所帮助。 感谢。
答案 1 :(得分:1)
这是按预期工作的,onDestroy()
无法保证被调用。如果服务被明确停止,它将被调用,但如果进程被突然终止(可能由于许多原因而发生),它将不会被调用。
正如已经指出的那样,您可以覆盖onTaskRemoved()以检测最近活动的滑动,但这不是唯一可以在没有警告的情况下杀死您的服务的情况。
如果您希望重新启动服务,则需要在onStartCommand (Intent intent, int flags, int startId)
START_STICKY
答案 2 :(得分:1)
您可以将已销毁活动的意图发送到服务以关闭它:
在您的活动中:
@Override
void onDestroy(){
super.onDestroy();
Intent intent = new Intent(this, YourService.class);
intent.setAction("STOP");
startService(intent);
}
在您的服务中:
@Override
void onStartCommand(Intent intent, int flag, int id){
if(intent.getAction().equals("STOP")){
stopSelf();
}
// code..
}
答案 3 :(得分:0)
//您可以像这样破坏您的服务
@Override
public void onDestroy() {
super.onDestroy();
// stop location updates
if (mLocationRequest != null && mLocationClient != null) {
mLocationClient.removeLocationUpdates(mLocationCallback);
}
Log.e("Rajneesh", "Destroy ... ");
}