Skip to content →

[Android] Menggunakan Splash Screen

Splash Screen adalah halaman yang berfungsi untuk mengumpulkan data-data terlebih dahulu sebelum masuk ke halaman utama suatu aplikasi. Splash Screen ini tidak akan berhenti jika data-data belum seluruhnya diambil, kecuali ada pengecualian apabila proses pengumpulan data terlalu lama atau tiba-tiba terputus dari koneksi biasanya akan memunculkan suatu notifikasi tergantung apa yang kita inginkan. Pada kesempatan kali ini kita akan membahas penggunaan Splash Screen untuk aplikasi yang akan teman-teman bangun.

1. Splash Screen Berdasarkan Waktu

Splash Screen yang ini adalah Splash Screen yang biasa saja tanpa ada proses pengumpulan data hanya menampilkan suatu halaman bergambar dengan waktu tertentu, apabila telah mencapai waktu yang telah kita tentukan maka akan menampilkan halaman berikutnya. So simple, right?

Pertama-tama kita buat halaman Splash Screen-nya di res-layout. Contoh saja kita ambil activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/bg" />

</LinearLayout>

Kemudian kita olah di Java, masuk ke src-package.name-MainActivity.java kita sulap menjadi seperti dibawah ini

private static final int SPLASH_TIMEOUT = 3000;
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.splashscreen);

	new Handler().postDelayed(new Runnable() {
<span style="font-family: mono-space, monospace;">		@Override</span>
		public void run() {
			Intent intent = new Intent(MainActivity.this, Home.class);
			startActivity(intent);
			finish();
		}
	}, SPLASH_TIMEOUT);
}

objek SPLASH_TIMEOUT bernilai 3000 maksudnya adalah 3000 milidetik, maka jika diubah menjadi satuan detik menjadi 3 detik. Tinggal kita atur saja mau berapa detik Splash Screen ini muncul. Nah pada kasus ini kita menggunakan kelas Handler yang berfungsi membuat suatu antrian, hampir seperti Thread. Dia akan men-delay selama waktu yang telah ditentukan oleh SPLASH_TIMEOUT kemudian dia akan menjalankan apa yang ada didalam method run(). Pada kode diatas saya gunakan Intent untuk berpindah halaman menuju jalaman Home.class.

 

2. Splash Screen Menggunakan HTTP Connection

Splash Screen yang ini memungkinkan kita untuk mengumpulkan data dari Web Server terlebih dahulu sebelum kita menggunakan aplikasi kita. Menggunakan cara ini mungkin lebih memakan waktu di halaman Splash Screen atau mungkin juga bisa lebih cepat, karena disini kita tidak berdasarkan waktu seperti cara pertama, melainkan berdasarkan data yang kita ambil. Apabila koneksi lancar ya data yang diambil lebih cepat begitu pula sebaliknya.

Untuk tampilan XML sama dengan yang diatas, sekarang kita buat beberapa kelas. Pertama kita buat kelas JSONTools.java untuk mendapatkan JSON dari suatu Web Server

public class JSONTools {	
	public static JSONObject getJSON(String url) {
		JSONObject json = null;
		try {			
			DefaultHttpClient client = new DefaultHttpClient();
			HttpPost post = new HttpPost(url);
			HttpResponse response = client.execute(post);
			HttpEntity entity = response.getEntity();
			InputStream is = entity.getContent();

			BufferedReader br = new BufferedReader(new InputStreamReader(is,
					"iso-8859-1"), 8);
			StringBuilder builder = new StringBuilder();
			String line = null;
			while ((line = br.readLine()) != null) {
				builder.append(line + "\n");
			}
			is.close();
			json = new JSONObject(builder.toString());
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (JSONException e) {
			e.printStackTrace();
		}		
		return json;
	}
}

Kemudian kita buat kelas untuk Splash Screen-nya

public class MainActivity extends Activity {
	private static final int SPLASH_TIMEOUT = 3000;
	public static String URL = "http://www.example.com";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.splashscreen);

		new PrefetchData().execute();
	}

	class PrefetchData extends AsyncTask<Void, Void, Void> {
		ProgressDialog progress = new ProgressDialog(SplashAsync.this);
		
		public PrefetchData() {			
			progress.setTitle(SplashAsync.this.getString(R.string.app_name));
			progress.setCancelable(false);
			progress.setCanceledOnTouchOutside(false);
			progress.setMessage("Downloading...");
		}

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			progress.show();
		}

		@Override
		protected Void doInBackground(Void... params) {
			Log.d("JSON", JSONTools.getJSON(URL).toString());
			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			if(progress.isShowing()){
				progress.dismiss();
				Intent intent = new Intent(SplashAsync.this, Home.class);
				startActivity(intent);
				finish();
				super.onPostExecute(result);
			}			
		}
	}
}

Tidak semudah cara pertama namun cukup mudah untuk cara kedua ini, kita cukup membuat kelas yang ter-extends AsyncTask. Kelas ini memungkinkan aplikasi kita untuk menjalankan suatu proses dibelakang layar, atau bahasa lainnya Background. Didalam kelas ini kita dapat meng-override 3 method antara lain

  • onPreExecute() : method ini memungkinkan suatu proses dapat dilakukan sebelum proses inti berjalan.
  • doInBackground() : merupakan inti proses dari aktivitas suatu kelas.
  • onPostExecute() : method yang akan berjalan ketika inti proses selesai di eksekusi.

Jangan lupa beri Permission INTERNET pada AndroidManifest.xml kira-kira hasilnya seperti dibawah ini

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.demosplashscreen"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.demosplashscreen.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Jalankan aplikasi, dan lihat di Debug…. Kenapa debug? Karena di method doInBackground() kita berikan perintah Log.d(…,…) yang merupakan fungsi untuk menulis di Debug.

Published in Android

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *