İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

arkaplanda (background'da) çalışan bir midlet örneği

Bu örnekte bir midlet'i arakplanda çalışır hale getiriyoruz. Arka planda çalışmak ile kastettiğimiz siz telefonla diğer işlemleri yaparken midletin çalışmaya devam etmesidir. Örneğin bir midletin belirli aralıklarla bir işlem gerçekleştirmesini isteyebilirsiniz. Ve şartlar yerine geldiğinde midlet ekranda görünür hale gelir. Örneğin önemli bir randevunuzu size hatırlatabilir.

Bir midleti arka plana atma kolay bir iştir. Eğer midlet'in herhangi bir yerinde

Display.getDisplay(this).setCurrent(null);

derseniz midlet arka planda çalışmaya devam eder. Burada yapılan ekranı null'lamaktır. Tekrar geri getirmek özellikle telefona bağlıdır. Teorik olarak

resumeRequest()

çağrısı yapıp, midlet'teki formu ekranda gösterirsen

Display.getDisplay(this).setCurrent(form);

midletin tekrar gözükmesi gerekir. Ancak SonyEricsson P800 ile denediğimde bu işlem gerçekleşmedi. Bunun yerine startApp() methodunu tekrar çağırdığımda ekranda midlet görünü verdi. Kısacası buradaki örnek java destekli telefonda çalışmayabilir. Çünkü bu olay cep telefonu üreticisine bağlıdır.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.microedition.midlet.*;
  2 import javax.microedition.lcdui.*;
  3 import java.util.*;
  4 public class BackgroundMidlet extends MIDlet{    
  5     private long hideTime;
  6     private Timer timer;
  7     private TimerTask task;
  8     private TestForm form;
  9     public void startApp(){
 10         form=new TestForm();
 11         Display.getDisplay(this).setCurrent(form);
 12     }    
 13     public void pauseApp(){}    
 14     public void destroyApp(boolean unconditional){}    
 15     public void hide(){
 16         if(Display.getDisplay(this)!=null){
 17             Display.getDisplay(this).setCurrent(null);
 18         }
 19         Date date=new Date();
 20         hideTime=date.getTime();        
 21         task=new TimerTask(){
 22             public void run(){
 23                 refresh();
 24             }
 25         };
 26         i=0;
 27         timer=new Timer();        
 28         timer.schedule(task,new Date(),1000);
 29     }
 30     int i=0;
 31     private void refresh(){
 32         i++;
 33         System.out.println("refreshing... "+i);
 34         if(i>5){
 35             timer.cancel();
 36             timer=null;
 37             startApp();
 38         }
 39     }
 40     class TestForm extends Form implements CommandListener{
 41         private Command startCommand=new Command("Start",Command.OK,1);
 42         public TestForm(){
 43             super("Test");
 44             StringItem item=new StringItem("test","Bu bir testir");
 45             append(item);
 46             addCommand(startCommand);        
 47             setCommandListener(this);            
 48         }
 49         public void commandAction(Command c, Displayable d){
 50             if(c==startCommand){
 51                 hide();
 52             }
 53         }
 54     }
 55 }

Midlet çalıştığında TestForm ekranda görünür hale gelir. TestForm'un start komutu seçildiğinde BackgroundMidlet'in hide methodu çağrılır. Önce

Display.getDisplay(this).setCurrent(null);

ile midlet background'a alınır. Bu method bir timer yaratır. Bu şekilde refresh methodu 1000 ms aralıkla çağrılır. refresh methodunda i=6 olduğu zaman timer durdurulur ve startApp methodu çağrılarak tekrar midlet görünür hale getirilir.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır