AGENDA
Tutorials - Android
Thread Android

Thread adalah suatu struktur pengendali program yang dapat dijalankan secara background.



Salah satu hal yang sangat penting dalam pembuatan berbagai aplikasi termasuk aplikasi berbasis mobile adalah penggunaan thread. Thread adalah suatu struktur pengendali program yang dapat dijalankan secara background, dan cara kerjanya adalah seperti listener. Sebagai contoh penggunaan, pada sebuah perangkat SMS, maka paling tidak ada dua buat thread, yaitu thread untuk mengirim pesan, dan thread untuk menerima pesan. Penggunaan thread sangat bagus untuk mengindari adanya deadlock pada suatu layanan.

Latihan kali ini adalah untuk membuat sebuah thread yang akan menampilkan pesan secara terus menerus dan sebuah bilangan acak.

Step 1

Buatlah proyek baru, dan atur propertinya sebagai berikut:

  1.  Project Name               : TryThread
  2.  Build Target                 : Android 2.2
  3.  Application Name         : TryThread
  4.  Package Name             : www.aplysit.com
  5.  Create activity              : TryThread
  6.  Min SDK Version          : 8

Step 2

Buka file values » strings.xml lalu modifikasi sehingga menjadi source code berikut:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Aplysit - IT Solution Center</string>
    <string name="app_name">Try Thread - www.aplysit.com</string>
</resources>

 

Step 3

Buka file layout » main.xml lalu modifikasi sehingga menjadi source code berikut:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<Button android:text="Start" android:layout_height="wrap_content" android:id="@+id/btn_start" android:layout_width="wrap_content"></Button>
<Button android:text="Stop" android:layout_height="wrap_content" android:id="@+id/btn_stop" android:layout_width="wrap_content"></Button>
</LinearLayout>

Layoutnya adalah seperti gambar berikut:

Step 4

Lalu buatlah sebuah file bernama myThread.java lalu ketikkan source code seperti berikut:

package www.aplysit.com;

import android.content.Context;
import android.os.Handler;

public class myThread {

    public Handler mhandler;
    public showText text;

    public myThread(Context context, Handler handler) {
        mhandler = handler;
    }

    public synchronized void startShowText() {
        if (text == null) {
            text = new showText();
            text.start();
        }
    }

    public synchronized void stopShowText() {
        if (text != null) {
            text.requestStop();
            text = null;
        }
    }

    private class showText extends Thread {

        private volatile boolean stop = false;

        public void run() {
            while ((!stop)) {
                mhandler.obtainMessage(threadsimple.run, "Pesan dari thread " + Math.random()).sendToTarget();
                try {
                    sleep(3000);
                } catch (Exception e) {
                }
            }
            if (stop) {
                mhandler.obtainMessage(threadsimple.stop).sendToTarget();
            }
        }

        public synchronized void requestStop() {
            stop = true;
        }
    }
}

Yang perlu diperhatikan adalah baris 29-52 yang mendefinisikan sebuah thread. Thread ini akan bekerja saat tombol Start ditekan, dan tetap bekerja terus, hingga tombol Stop ditekan.

Pada baris 36 pada thread akan memanggil sebuah method obtainMessage untuk menampilkan pesan, berupa “Pesan dari thread (diikuti oleh sebuah nomor acak)”

Pada baris 39 thread akan diaktifkan setiap 3000 milidetik.

Step 5

Lalu buatlah sebuah file bernama threadsimple.java lalu ketikkan source code seperti berikut:

package www.aplysit.com;

import www.aplysit.com.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class threadsimple extends Activity {

    public static final int run = 1;
    public static final int stop = 2;
    public myThread thread;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button start = (Button) findViewById(R.id.btn_start);
        start.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                //TODO Auto-generated method stub
                thread.startShowText();
                System.out.println("run");
            }
        });

        Button stop = (Button) findViewById(R.id.btn_stop);
        stop.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                //TODO Auto-generated method stub
                thread.stopShowText();
                System.out.println("stop");
            }
        });
    }

    public void onStart() {
        super.onStart();
        thread = new myThread(this, mHandler);
    }

    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case run:
                    Toast.makeText(getApplicationContext(), msg.obj.toString(), 2).show();
                    break;
                case stop:
                    Toast.makeText(getApplicationContext(), "Thread Stop", 2).show();
                    break;
            }
        }
    };
}

Baris 16 adalah membuat objek baru bertipe thread.
Baris 28 untuk memulai kerja thread.
Baris 37 untuk menghentikan kerja thread.

Step 6

Lalu jalankan proyek tersebut, maka hasilnya adalah seperti gambar berikut ini:

 

Like or Share This Article




COMMENTS ( 0 )
 
Keep connected with us, mobile apps available now !!