Timer selalu merupakan bagian penting dari pemrograman. Mereka
bahkan lebih penting dalam domain mobile sebagai dua aplikasi yang
paling digunakan pada ponsel adalah permainan dan auto sinkronisasi
aplikasi jaringan diaktifkan. Kedua jenis aplikasi sangat bergantung pada ada timer untuk berfungsi. Penginderaan ini Sun Microsystems sudah termasuk Timer kelas dan TimerTask dalam Mobile Information Device Profile (MIDP).
Kedua kelas ini sangat mudah digunakan dan memungkinkan kita untuk melakukan fungsi waktu kompleks. Mereka dapat digunakan dalam beberapa tugas seperti:
- Permainan
- Animasi
- Otomatis sinkronisasi data dari server
- Pengingat
- Splash layar untuk menampilkan logo perusahaan
- Auto bantuan fungsi seperti di dalam Nokia 6610
Dengan demikian fungsi waktu adalah sangat penting. Sekarang kita akan membahas Timer kelas dan TimerTask lebih luas. Namun
sebelum mengejar lebih lanjut saya ingin memberitahu Anda sebuah fakta
penting, kelas Timer tidak dapat menjamin ketepatan interval. Jadi kita tidak harus menggunakan class Timer untuk waktu yang sangat akurat menjaga tugas-tugas seperti stop watch. Kami telah memberikan contoh kode untuk stop watch hanya untuk membuat Anda terbiasa dengan pemrograman untuk timer.
Timer
Kelas Timer terkandung dalam paket java.util dari Mobile Information Device Profile (MIDP). Kelas Timer memberikan kita 2 jenis ketepatan waktu, yaitu:
Timer
menyediakan satu waktu eksekusi untuk tugas-tugas seperti menghidupkan
splash screen atau menampilkan bantuan secara otomatis setelah beberapa
waktu, sekali. Ada 2 metode dalam kelas Timer yang dapat menjadwalkan Timer untuk berjalan sekali, yaitu:
o public void jadwal (TimerTask task, waktu Tanggal)
Metode ini dapat digunakan untuk penjadwalan tugas tertentu untuk eksekusi pada waktu yang ditentukan. Jika waktu saat ini sudah melewati waktu yang disebutkan oleh programmer, tugas dijadwalkan untuk eksekusi langsung.
o public void jadwal (TimerTask task, long delay)
Metode jadwal eksekusi TimerTask ditentukan setelah jumlah yang ditentukan keterlambatan.
Eksekusi diulang tugas diperlukan untuk situasi tertentu seperti aplikasi game dan aplikasi auto sinkronisasi. Permainan umumnya melibatkan animasi dimana perubahan frame dihitung melalui penggunaan Timer dengan eksekusi diulang. Kelas Timer menyediakan metode berikut untuk eksekusi diulang:
Penundaan eksekusi tetap diulang
Dalam
jenis penjadwalan tugas-tugas yang dijadwalkan untuk berjalan relatif
terhadap waktu sebenarnya dari pelaksanaan eksekusi sebelumnya.
o public void jadwal (TimerTask task, firstTime Tanggal, waktu yang panjang)
Metode ini dapat digunakan untuk penjadwalan tugas tertentu berulang kali untuk awal eksekusi pada waktu yang ditentukan.
o public void jadwal (TimerTask task, long delay, periode panjang)
Metode jadwal eksekusi TimerTask tertentu berulang kali setelah jumlah yang ditentukan keterlambatan.
Bunga tetap diulang eksekusi
Dalam jenis penjadwalan tugas-tugas yang dijadwalkan untuk berjalan secara berkala waktu. Jika
salah satu eksekusi tertunda maka eksekusi lainnya akan terjadi dengan
cepat sehingga memastikan bahwa dalam jangka panjang frekuensi dari
eksekusi adalah kebalikan dari periode yang ditentukan.
o public void scheduleAtFixedRate (TimerTask task, firstTime Tanggal, waktu yang panjang)
Metode ini dapat digunakan untuk penjadwalan tugas tertentu berulang kali untuk awal eksekusi pada waktu yang ditentukan.
o public void scheduleAtFixedRate (TimerTask task, long delay, periode panjang)
Metode jadwal eksekusi TimerTask tertentu berulang kali setelah jumlah yang ditentukan keterlambatan.
TimerTask
Kelas ini merupakan tugas yang harus dijadwalkan oleh Timer. TimerTask adalah kelas abstrak dan menerapkan 'Runnable' antarmuka dan dengan demikian mengandung run () method. Tindakan yang harus dilakukan dalam eksekusi Timer harus dilaksanakan di jalankan () metode. Sekarang kita akan melihat contoh praktis ekstensif menggunakan Timer dan TimerTask kelas.
Kode Contoh: Timer & TimerTask
Contoh ini menunjukkan bagaimana bekerja dengan Timer dan TimerTask. Ini tampilan aplikasi adalah stopwatch. Fitur
utama dari aplikasi ini adalah bahwa kita dapat menyimpan upto 32
timing berbeda sepersekian detik dalam array dan menampilkannya pada
kanvas. Harap
diingat bahwa timer MIDP tidak boleh digunakan untuk kegiatan yang
memerlukan waktu precesion mutlak seperti acara trek dan lapangan.
Tombol berikut digunakan dalam kami stopwatch:
Ø '*' Tombol
Hal ini digunakan untuk memulai dan menghentikan stopwatch.
Ø '0 'Tombol
Hal ini digunakan untuk mengatur stopwatch untuk nol.
Ø '#' Tombol
Hal ini digunakan untuk mengaktifkan fungsi detik.
/ ************************* /
/ * TimerMIDlet.java * /
/ ************************* /
mengimpor javax.microedition.midlet *;.
mengimpor javax.microedition.lcdui *;.
/ **
* @ Author SKJ
* @ Version 1.0.0
* /
TimerMIDlet kelas publik meluas javax.microedition.midlet.MIDlet
{
swasta Tampilan layar;
/ / Variabel objek defineing
TimerCan swasta bisa;
public void startApp ()
{
this.display = Display.getDisplay (ini);
this.can = new TimerCan ();
/ / Mengatur tampilan saat ini
this.display.setCurrent (this.can);
}
public void pauseApp () {
}
public void destroyApp (boolean unconditional) {
}
}
/ ************************* /
/ * TimerCanvas.java * /
/ ************************* /
mengimpor javax.microedition.lcdui *;.
import java.util *;.
/ **
* @ Author SKJ
* @ Version 1.0.0
* /
masyarakat kelas TimerCan meluas kanvas
{
/ / Untuk Timer
swasta Timer Timer ;
/ / Variabel untuk menyimpan waktu
jam private int [] ;
private int sec [] ;
private int min [] ;
private int msec [] ;
/ / Variabel kanvas
private int maxx ;
private int maxY ;
/ / Array incement dan pengurangan
private int saat ini ;
/ / Variabel g.drawString untuk ditampilkan di baris berikutnya
private int ctrY ;
/ Panjang font / toko untuk menampilkan di tengah kanvas
private int panjang ;
private int offsety;
/ / Variabel waktu
swasta String waktu;
/ / Font tinggi ternak dan lebar
private int strWid;
private int strht;
boolean swasta gulir ;
private int countpl ;
private int rect ;
/ / Array increment dan decrement variabel
swasta int counter ;
/ / Untuk memulai dan menghentikan waktu
boolean swasta mulai ;
swasta boolean berhenti ;
boolean swasta ya ;
/ / Konstruktor
publik TimerCan ()
{
super () ;
mencoba
{
/ / Mendapatkan heigth dan lebar kanvas
this.maxX = this.getWidth () ;
this.maxY = this.getHeight () ;
/ / Variabel initilizing
this.ctrY = 0 ;
this.rect = 0 ;
this.countpl = 0 ;
this.current = 0 ;
this.offsetY = 0 ;
/ / Inisialisasi array dengan 33 Ukuran
this.hour = new int [33] ;
this.min = new int [33] ;
this.sec = new int [33] ;
this.msec = new int [33] ;
this.start = false ;
this.stop = true ;
this.yes = true ;
this.scroll = false ;
/ / Array untuk initilizing nol
for (int j = 0 J <= 31; j + +)
{
this.hour [j] = 0 ;
this.min [j] = 0 ;
this.sec [j] = 0 ;
this.msec [j] = 0 ;
}
}
catch (Exception e)
{
e.printStackTrace () ;
}
}
public void paint (Graphics g)
{
g.setColor (180254243);
/ / Menggambar persegi panjang
g.fillRect (0,0, Maxx, maxY);
/ / Menginisialisasi Font
Font font = Font.getDefaultFont () ;
/ / Mendapatkan lebar dari string
this.strWid = font.stringWidth ("this.time");
/ / Mendapatkan hieght string
this.strht = font.getHeight ();
this.ctrY = this.strht;
for (int j = 1 J <= saat ini J + +)
{
/ / Pengaturan variabel waktu seperti 00:00:00:00
jika (jam [j-1] <10)
{
this.time = "0" + String.valueOf (this.hour [j-1]) + ":";
}
lain
{
this.time = String.valueOf (this.hour [j-1]) + ":" ;
}
if (min [j-1] <10)
{
this.time = this.time + "0" + String.valueOf (this.min [j-
1]) + ":" ;
}
lain
{
this.time = this.time + String.valueOf (this.min [j-1]) +
":" ;
}
if (sec [j-1] <10)
{
this.time = this.time + "0" + String.valueOf (this.sec [j-1])
+ ":" ;
}
lain
{
this.time = this.time + String.valueOf (this.sec [j-1]) +
":" ;
}
if (msec [j-1] <10)
{
this.time = this.time +
"0" + String.valueOf (this.msec [j1]);
}
lain
{
this.time = this.time + String.valueOf (this.msec [j-1]):
}
"." this.time = j + + this.time;
/ / Mendapatkan lebar dari string
this.strWid = font.stringWidth (this.time);
this.length = this.maxX - this.strWid;
/ / Panjang dibagi dua untuk cenrte
this.length / = 2;
/ / Mengatur Warna dan tampilan waktu yang tersimpan
g.setColor (255,0,128);
g.drawString (this.time, this.length, this.ctrY-
this.offsetY, Graphics.TOP | Graphics.LEFT);
/ / Selisih ctrY oleh gieght tali untuk menarik waktu di depan
/ / Baris
this.ctrY + = this.strht;
}
/ / Set variabel waktu seperti 00:00:00:00
jika (jam [saat ini] <10)
{
this.time = "0" +
String.valueOf (this.hour [saat ini]) + ":" ;
}
lain
{
this.time = String.valueOf (this.hour [saat ini]) + ":";
}
if (min [saat ini] <10)
{
this.time = this.time +
"0" + String.valueOf (this.min [saat ini]) + ":" ;
}
lain
{
this.time = this.time +
String.valueOf (this.min [saat ini]) + ":" ;
}
if (detik [saat ini] <10)
{
this.time = this.time +
"0" + String.valueOf (this.sec [saat ini]) + ":" ;
}
lain
{
this.time = this.time +
String.valueOf (this.sec [saat ini]) + ":" ;
}
if (msec [saat ini] <10)
{
this.time = this.time +
"0" + String.valueOf (this.msec [saat ini]);
}
lain
{
this.time = this.time +
String.valueOf (this.msec [saat ini]);
}
/ / Mendapatkan lebar dari string
this.strWid = font.stringWidth (this.time);
this.length = this.maxX - this.strWid;
/ / Panjang dibagi dua untuk menampilkan di tengah
this.length / = 2;
/ / Mengatur Warna untuk rect
g.setColor (255255255);
/ / Fillrect latar belakang menjalankan menonton
g.fillRect (0,0, Maxx, strht);
g.fillRect (0, (countpl + 1) * strht, Maxx, maxY);
/ / Tampilan jam waktu: menit: detik: msec
g.setColor (0,0,0);
g.drawString (this.time, panjang, 0, Graphics.TOP | Graphics.LEFT);
}
private void startTimer ()
{
TimerTask task = new TimerTask ()
{
public void run ()
{
msec [saat ini] + +;
if (msec [saat ini] == 100)
{
msec [saat ini] = 0;
/ / Detik selisih dengan 1 jika sama dengan 100 msec
sec [saat ini] + +;
}
else if (detik [saat ini] == 60)
{
sec [saat ini] = 0;
/ / Menit selisih dengan 1 jika sama dengan 60 detik
min [saat ini] + +;
}
lain jika (min [saat ini] == 60)
{
min [saat ini] = 0;
/ / Jam selisih dengan 1 Ketika Min sebesar 60
jam [saat ini] + +;
}
lain jika (jam [saat ini] == 24)
{
jam [saat ini] = 0;
}
repaint ();
}
};
Timer Timer = new ();
timer.scheduleAtFixedRate (tugas, 10,10);
}
/ **
* Disebut ketika tombol ditekan.
* /
terlindung membatalkan keyPressed (int keyCode)
{
int action = getGameAction (keyCode);
if (== tindakan Canvas.UP && offsety> 0)
{
offsety - = strht;
}
if (== tindakan Canvas.DOWN && offsety <kontra * strht && gulir
== True)
{
offsety + = strht;
}
if (== keyCode Canvas.KEY_STAR)
{
if (this.start == false)
{
this.start = true;
this.stop = false;
}
lain jika (this.stop == false)
{
this.start = false;
this.stop = true;
this.timer.cancel ();
}
if (mulai == true)
{
this.StartTimer ();
}
}
if (== keyCode Canvas.KEY_NUM0)
{
/ / Cancellling efek Timer
this.timer.cancel ();
/ / Array untuk menetapkan nol
this.hour [saat ini] = 0;
this.min [saat ini] = 0;
this.sec [saat ini] = 0;
this.msec [saat ini] = 0;
this.start = false;
}
if (== keyCode Canvas.KEY_POUND)
{
if (start = palsu!)
{
jika (((maxY - ctrY) <strht | | ctrY> = maxY) && offsety
<((32-countpl) * strht) && saat <32)
{
offsety + = this.strht;
this.scroll = true;
this.counter + +;
this.yes = false;
}
lain jika (ya)
{
this.countpl + +;
this.rect + = this.ctrY;
}
jika (saat ini <= 31)
{
this.current + +;
/ / Toko waktu saat ini dalam array ketika kunci pon
ditekan
this.hour [saat ini] = this.hour [saat-1];
this.min [saat ini] = this.min [saat-1];
this.sec [saat ini] = this.sec [saat-1];
this.msec [saat ini] = this.msec [saat-1];
}
}
}
}
Ketika Anda menjalankan aplikasi layar berikut akan ditampilkan:
|
|
Bila Anda tekan '*' tombol kemudian memulai timer
|
|
Bila Anda menekan tombol '#' kemudian menampilkan waktu ketika Anda mengklik:
|
|
Tidak ada komentar:
Posting Komentar