杀死我的应用程序时,Java android服务不会被销毁

时间:2017-08-24 13:12:17

标签: java android

这是我的服务,此服务检查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);
    }
}

但是当我杀死我的应用程序时,我发现这项服务一直都有效。我怎么能完成这项服务?当我运行我的应用程序时,又开始了一次

4 个答案:

答案 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 ... ");
}