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