JavascriptProva

mercoledì 22 giugno 2016

Activity a intervalli regolari.

Esercizio: un'activity appare a intervalli casuali.

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