Привет друзья У меня есть одна проблема для решения... Я хочу полностью уничтожить службу, как только я вызову метод onDestroy() из Activity. Но моя проблема в том, что я не могу полностью ее уничтожить. В фоновом режиме его продолжают работать, я делюсь образцом кода, который я пытался.
//Activity Class
public class ServiceToAct extends Activity {
private static final String TAG = "BroadcastEvent";
private Intent intent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
intent = new Intent(this, BroadcastService.class);
startService(intent);
registerReceiver(broadcastReceiver, new IntentFilter(myService.BROADCAST_ACTION));
}
/*@Override
protected void onResume() {
super.onResume();
}*/
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(broadcastReceiver);
}
@Override
protected void onDestroy() {
stopService(intent);
Toast.makeText(this, "Destroy Completely", Toast.LENGTH_LONG).show();
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
}
};
}
// service class
public class myService extends Service {
private static final String TAG = "BroadcastEvent";
public static final String BROADCAST_ACTION = "com.service.activity.myService";
private final Handler handler = new Handler();
Intent intent;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this, "created", Toast.LENGTH_LONG).show();
intent = new Intent(BROADCAST_ACTION);
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Toast.makeText(this, "start", Toast.LENGTH_LONG).show();
handler.removeCallbacks(sendToUI);
handler.postDelayed(sendToUI, 1000);
}
@Override
public void onDestroy() {
super.onDestroy();
stopSelf();
//stopService(intent);
Toast.makeText(this, "Destroy", Toast.LENGTH_LONG).show();
}
private Runnable sendToUI = new Runnable() {
@Override
public void run() {
myData();
handler.postDelayed(this, 10000);
}
};
private void myData() {
Log.d(TAG, "keep on entering");
Toast.makeText(this, "Keep on despling in UI", Toast.LENGTH_LONG).show();
sendBroadcast(intent);
}
}
На самом деле, я хочу обновить свой пользовательский интерфейс от службы, Mine работает, но если я уничтожу службу, продолжайте вызывать метод myData(), и я получаю сообщение Toast msg, если я закрою приложение. Моя проблема в том, что я не хочу, чтобы этот тост-msg после того, как служба была разрушена. Я использовал метод stopService (намерение), который уничтожает службу, но фоновый метод myData() продолжает звонить
для остановки полностью использовать это.
myActivity.java
@Override
public void onDestroy() {
stopService(intent);
super.onDestroy();
Toast.makeText(this, "Destroy", Toast.LENGTH_LONG).show();
}
service.java
@Override
public void onDestroy()
{
stopSelf();
super.onDestroy();
}
Лучше никогда не звонить на Xxx() неразумно. Используйте stopService (Intent i) в своей деятельности и stopSelf() в вашем сервисе, чтобы остановить его.
использовать метод stopService() после обновления пользовательского интерфейса
или
Вместо использования startService используйте bindService в активности. Когда активность разрушается, служба также разрушает
Service
, жизненный цикл которой был связан с вашей деятельностью, вам следует рассмотреть возможность вызоваbindService
для ее запуска, а неstartService
. Таким образом,Service
завершит работу, когда последняя связаннаяActivity
unbindService
.