Ho ottenuto agevolmente, con il mio schema originale creato da me, un "rimbalzo" fra il Service Alfa e l'Activity Seconda.
Adesso ci metto un timer.
Ecco i codici:
MainActivity:
public class MainActivity extends Activity {
Button bttStart;
Button bttStop;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bttStart=(Button)findViewById(R.id.button1);
bttStop=(Button)findViewById(R.id.button2);
bttStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Globals.stop=false;
startService(new Intent(getApplicationContext(),Alfa.class));
}
});
bttStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Globals.stop=true;
Globals.alarmManager.cancel(Globals.pendingIntent);
Log.d("STOP","TRUE");
}
});
}
}
Alfa:
public class Alfa extends Service{
Intent intent;
@Override
public int onStartCommand(Intent intent, int flags, int startUI){
Log.v("ALFA","ONSTARTCOMMAND");
stopSelf();
Log.v("ALFA","/ ONSTARTCOMMAND");
return Service.START_NOT_STICKY;
}
@Override
public void onDestroy(){
Log.v("ALFA","ONDESTROY");
if(Globals.stop==false){
intent=new Intent(this,Seconda.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Globals.pendingIntent=PendingIntent.getActivity(this, 0, intent, 0);
Globals.alarmManager=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Globals.alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5*1000, Globals.pendingIntent);
}
Log.v("ALFA","/ ONDESTROY");
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
Seconda:
public class Seconda extends Activity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seconda);
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
@Override
public void onDestroy(){
Log.d("SECONDA", "ONDESTROY");
if(Globals.stop==false)startService(new Intent(this,Alfa.class));
super.onDestroy();
Log.d("SECONDA", "/ ONDESTROY");
}
}
E' il caso di vedere dove sono posizionati gli "stop", ossia le condizioni per l'interruzione del ciclo.
Essi sono posizionati esclusivamente nei metodi onDestroy delle due classi.
Ho aggiunto AlarmManager come variabile globale in modo che possa essere direttamente azionata da MainActivity.
Nessun commento:
Posta un commento