如何在应用程序关闭android时停止服务

时间:2014-05-03 09:16:09

标签: android service

任何人都可以告诉我如何在应用关闭时停止服务。 在我的项目中,即使应用程序关闭,服务仍然在后台运行。我已经提供了我的参考资料。

建议请。

感谢您宝贵的时间!..

MainActivity.java

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    startService(new Intent(this, MyService.class));
    Calendar cal = Calendar.getInstance();
    Intent intent = new Intent(this, MyService.class);
    PendingIntent pintent = PendingIntent
            .getService(this, 0, intent, 0);

    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    // Start service every 20 seconds
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
            10* 1000, pintent);

}


}

MyService.java

public class MyService extends Service {


String result_data = "";

public MyService() {
}

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}


@Override
public void onCreate() {
//  Toast.makeText(this, "The new Service was Created", Toast.LENGTH_LONG).show();

}

@Override
public void onStart(Intent intent, int startId) {
    // For time consuming an long tasks you can launch a new thread here...
    Toast.makeText(this, " Service Started", Toast.LENGTH_LONG).show();

    Authentication_Class task = new Authentication_Class();
    task.execute();

}

@Override
public void onDestroy() {
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();

}

public class Authentication_Class extends AsyncTask<Void, Void, Void>
{
    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
    }


    @Override
    protected Void doInBackground(Void... params) 
    {
        // TODO Auto-generated method stub
            try {
                Call_service();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        return null;
    }

    private void Call_service() throws Exception{
        // TODO Auto-generated method stub

    System.setProperty("http.keepAlive", "false");

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;

    String URL          =   "";
    String METHOD_NAME  =   "";
    String NAMESPACE    =   "";
    String SOAPACTION   =   "";

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    // Add parameters if available 

    envelope.setOutputSoapObject(request);
    HttpTransportSE httpTransportSE = new HttpTransportSE(URL,15000);
    try {

        httpTransportSE.call(SOAPACTION, envelope);
        SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
        result_data = String.valueOf(result);
        System.out.println(">>-- RESPONSE    :    " +result_data);


    } 

    catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
}

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub

    }
}   

}

1 个答案:

答案 0 :(得分:1)

在您完成上次活动的活动中的onDestroy()方法中使用此方法,如下所示:

 @Override
        protected void onDestroy() {

            super.onDestroy();
            AppLog.Log(TAG, "On destroy");
            stopService(new Intent(getApplicationContext(), MyService .class));

}