Applications, Tasks and Stacks
• Android dapat menjalankan beberapa aplikasi secara bersamaan
• Dari sudut pandangan pengguna, setiap aplikasi adalah tugas
▫ tugas terdiri dari tumpukan elemen Kegiatan
▫ Kegiatan tidak dipetakan 1 ke 1 di aplikasi
• Aplikasi dapat berbagi komponen
▫ Sebagai contoh, Anda dapat memanggil sebuah Kegiatan dari aplikasi lain atau perpustakaan, dan akan muncul sebagai bagian dari aplikasi
· Anda kemudian dapat kembali ke kegiatan sebelumnya ketika selesai
· Kegiatan-dapat mendorong dan muncul dari tumpukan tugas
▫ Ini adalah pengaturan yang sangat fleksibel!
• Dapat mengkonfigurasi apakah aplikasi menggunakan tumpukan atau kegiatan tunggal
Activitiy
Activity adalah salah satu komponen
aplikasi yang menyediakan sebuah layar yang mana user bisa berinteraksi dengan
aplikasi, misalnya menelepon, mengambil foto, mengirim email, atau melihat
peta. Setiap activity memiliki window sebagai tempat meletakkan user interface.
Window tersebut biasanya memenuhi layar, bisa juga lebih kecil dari layar dan
melayang di atas window lain.
Sebuah aplikasi biasanya terdiri
dari beberapa activity yang satu sama lain terikat secara longgar. Biasanya, satu
activity dalam sebuah aplikasi dikhususkan sabagai activity "main",
yang mana akan ditampilkan kepada user disaat aplikasi dijalankan pertama kali.
Setiap activity kemudian bisa menjalankan activity lain untuk melakukan
pekerjaan yang berbeda. Setiap kali ada activity baru dijalankan, activity
sebelumnya dihentikan, tetapi sistem menyimpan activity tersebut di dalam
"tumpukan" (stack). Ketika sebuah activcity dimulai, activity
tersebut ditempatkan ditempatkan paling atas pada stack dan mendapatkan fokus
dari user. Prinsip antrian stack pada dasarnya adalah "yang pertama
masuk, yang terakhir keluar" (last in first out), jadi ketika user selesai
dengan sebuah activity dan menekan tombol KEMBALI, activity tersebut
dikeluarkan dari stack (dan dihancurkan) dan activity pada stack dibawahnya
dikembalikan.
Ketika sebuah activity dihentikan
karena ada activity baru yang dimulai, perubahan keadaan ini dinotifikasikan
melalui siklus metode pemanggilan kembali activity . Terdapat beberapa metode
pemanggilan kembali yang bisa diterima oleh activity, karena adanya perubahan
keadaan dan setiap metode pemanggilan kembali menyediakan kita kesempatan untuk
melakukan pekerjaan yang lebih spesifik yang sesuai dengan perubahan keadaan
activity tersebut. Sebagai contoh, ketika activity berhenti, activity tersebut
harus melepaskan obyek yang besar, misalnya koneksi jaringan atau database.
Ketika activity dimulai kembali, kita bisa memperoleh kembali sumber daya yang
dibutuhkan dan memulai kembali kegiatan yang di iterupsi. Transisi keadaan ini
adalah bagian dari siklus hidup activity.
Services
Services adalah aplikasi komponen
mewakili salah satu keinginan aplikasi keinginan untuk melakukan operasi
longer-running walaupun tidak berinteraksi dengan pengguna atau untuk memasok
fungsionalitas untuk menggunakan aplikasi lain.
Satu hal lagi tentang service di
Android :
·
Service bukanlah proses terpisah
·
Service bukanlah sebuah Thread
Harap diingat ini ketika mencoba
untuk mengembangkan multithreading aplikasi…
biarkan mulai bekerja.
Dengan asumsi bahwa kita telah
menciptakan proyek android dasar, berikut adalah kegiatan kami :
1
2
3
4
5
6
7
8
9
10
11
12
|
//AndroidservicetutorialActivity.java
package com.inchoo.tutorial;
import android.app.Activity;
import android.os.Bundle;
public class
AndroidservicetutorialActivity extends Activity {
/** Called
when the activity is first created. */
@Override
public
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
|
Membuat Service Sederhana :
Membuat kelas
yang disebut FirstService di namespace anda, Service class dan Eclipse akan
memandu Anda untuk mengimpor namespaces yang diperlukan dan juga menambah
keterisolasian metode (onBind):
1
2
3
4
5
6
7
8
9
|
package com.inchoo.tutorial;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class FirstService extends
Service{
@Override
public
IBinder onBind(Intent arg0) {
//
TODO Auto-generated method stub
return
null;
}
}
|
Sekarang kita akan menimpa dua
metode lain: onStart dan onDestroy, jadi kelas FirstService kami terlihat
seperti ini :
|
package com.inchoo.tutorial;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class FirstService extends
Service{
@Override
public
IBinder onBind(Intent arg0) {
//
TODO Auto-generated method stub
return
null;
}
@Override
public
void onStart(Intent intent, int startId) {
//
TODO Auto-generated method stub
super.onStart(intent,
startId);
}
@Override
public
void onDestroy() {
//
TODO Auto-generated method stub
super.onDestroy();
}
}
|
Jangan lupa untuk menambahkan
pernyataan layanan ini di AndroidManifest.xml Anda untuk diatur dengan benar :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?xml
version="1.0" encoding="utf-8"?>
package="com.inchoo.tutorial"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".AndroidservicetutorialActivity"
android:label="@string/app_name" >
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".FirstService" ></service>
</application>
</manifest>
|
Biarkan menambahkan log untuk
mengetahui kapan service dimulai dan diakhiri juga kami akan segera
menghentikan service setelah memulai seperti seseorang dari Google berkata di
suatu tempat : jadi bagus untuk aplikasi lain, mulai layanan Anda, melakukan
apa pun yang perlu anda lakukan, dan kemudian hentikan service setelah itu…
Akhirnya keluar FirstService.java
kelas terlihat seperti ini :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package com.inchoo.tutorial;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class FirstService extends
Service{
private
static String TAG = "Inchoo.net tutorial";
@Override
public
IBinder onBind(Intent arg0) {
//
TODO Auto-generated method stub
return
null;
}
@Override
public
void onStart(Intent intent, int startId) {
//
TODO Auto-generated method stub
super.onStart(intent,
startId);
Log.d(TAG,
"FirstService started");
this.stopSelf();
}
@Override
public
void onDestroy() {
//
TODO Auto-generated method stub
super.onDestroy();
Log.d(TAG,
"FirstService destroyed");
}
}
|
Dan sekarang adalah saatnya untuk
mulai dari aktivitas kita ( androidservicetutorialactivity.java ) :
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package com.inchoo.tutorial;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class
AndroidservicetutorialActivity extends Activity {
/** Called
when the activity is first created. */
@Override
public
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startService(new
Intent(this, FirstService.class));
}
}
|
Mulai aplikasi
android Anda dan jika Anda melihat ke dalam LogCat Anda akan menemukan baris
ini:
Intent
Perpindahan Halaman Android (Intent)
Berikut ini sedikit tutorial dasar dalam programming Android,
yaitu Intent. Intent adalah sebuah kelas pada Java khususnya dalam programming
Android Application yang berfungsi untuk perpindahan halaman. Tidak mungkin kan
kita bikin aplikasi cuma sehalaman aja, yaaa kecuali kita cuma bikin aplikasi
Kalkulator dan aplikasi kecil semacamnya.
Sekarang bikin main.xml seperti dibawah ini :
Kemudian bikin 1 lagi Layout XML kek dibawah ini… Caranya,
klik kanan res/layout kemudian new – Other – Android XML Layout File
Ingat konsep Activity, dia adalah single screen. Jadi satu
layout adalah satu activity, berarti karena kita memiliki 2 layout berarti kita
harus punya 2 activity juga…
Sekarang bikin activity dulu buat tampilan kedua diatas… diasumsikan
sudah bisa ngatur activity. Jadi
sekarang saya tinggal share aksi-aksinya aja…
Untuk tampilan 1, beri aksi di tombol seperti dibawah ini :
Untuk tampilan 2, beri kode dibawah ini pada bagian aksi :
Masih ada 1 langkah lagi, kita harus “mendaftarkan” activity
yang kita buat ke dalam AndroidManifest.xml jadi apabila kita memiliki 10
activity, berarti 10 activity tersebut harus kita daftarkan tadi. Caranya :
- Buka AndroidManifest.xml
- Pada tab dibagian bawah, pilih
Application
- Scroll ke paling bawah, Application
Node, klik Add pilih Radio Button “Create a new element at the top level, in
Application” pilih Activity
- Bagian kanannya, Bagian Name pilih
Browse, pilih Activity yang ingin didaftarkan
- Save atau CTRL+S
Kira-kira begini kalo
di printscreen :
Kalo mau liat xml
lengkapnya dibawah ini :
BroadcastReceiver
• BroadcastReceiver adalah agak seperti Service
▫ Tidak UI
▫ Tapi tidak berjalan terus menerus di latar belakang
• Anda mendaftar untuk acara BroadcastReceiver untuk merespon
▫ Ketika mereka terjadi, OS otomatis memicu metode yang tepat dari contoh BroadcastReceiver terdaftar
▫ Ketika peristiwa terjadi, mereka sebuah Intent dilewatkan, yang menentukan sesuatu tentang jenis tindakan, dan data yang mungkin berhubungan
▫ Misalnya, SMS masuk, dan Intent akan memiliki nomor telepon SMS dan teks di dalamnya
Content Provider
Sekarang kita bahas apa itu Content Provider,
secara garis besar Content Provider adalah platform android untuk sharing
informasi antar aplikasi android. Contoh untuk akses informasi device android
Anda pada aplikasi, Anda bisa menggunakan ContentProvider. Berikut adalah
contoh kodingnya. Kita akan menggunakan kode pada blog sebelumnya dengan
penambahan sedikit. Kita akan menambahkan ListView untuk display device
information
1.
Buat file xml pada folder res-layout : row.xml
<?xml
version=”1.0″ encoding=”utf-8″?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_height=”wrap_content”
android:padding=”5sp”
android:layout_width=”fill_parent”>
<TextView
android:layout_height=”wrap_content”
android:id=”@+id/textName”
android:text=”Name”
android:textSize=”18sp”
android:layout_width=”fill_parent”
android:layout_weight=”1″></TextView>
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:id=”@+id/textValue”
android:text=”Value”
android:textSize=”18sp”
android:gravity=”right”></TextView>
</LinearLayout>
2.
Edit kode pada layout activity_main.xml
<RelativeLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”.MainActivity” >
<TextView
android:id=”@+id/text1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_centerHorizontal=”true”
android:layout_centerVertical=”true”
android:text=”@string/hello_world” />
<fragment
xmlns:android=”http://schemas.android.com/apk/res/android”
android:name=”com.example.test.Header”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:text=”Header”
android:id=”@+id/tutview_fragment”>
</fragment>
<Button
android:id=”@+id/buttonTestIntent”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Start”/>
<ListView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:id=”@+id/listView”>
</ListView>
</RelativeLayout>
Kita
menambahkan ListView
3.
Edit kode MainActivity.java
package
com.example.test;
import
android.os.Bundle;
import android.provider.BaseColumns;
import android.provider.Settings;
import android.provider.UserDictionary;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public
class MainActivity extends FragmentActivity {
private
TextView textView;
private View view;
private LayoutInflater inflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView
text = ( TextView)findViewById(R.id.text1);
text.setText(“Test”);
Button
button = (Button)findViewById(R.id.buttonTestIntent);
button.setOnClickListener(clickListener); //
}
private
OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {
//startService(new
Intent(MainActivity.this,TestService.class));
ContentResolver
cr = getContentResolver();
Cursor cursor = cr.query(Settings.System.CONTENT_URI, null, null, null, null);
startManagingCursor(cursor);
ListView
listView = (ListView) findViewById(R.id.listView);
String[] from = { Settings.System.NAME, Settings.System.VALUE };
int[] to = { R.id.textName, R.id.textValue };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(),
R.layout.row, cursor, from, to);
listView.setAdapter(adapter);
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Kode
yang harus diperhatikan adalah bagian ini:
//
instantiasi content provider
ContentResolver
cr = getContentResolver();
//
fungsi kode dibawah adalah query content provider dengan URI =
content://settings/system atau Settings.System.CONTENT_URI
//
URI itu mirip URL pada web , cuman gunanya disini sebagai alamat data yang akan
diambil
//
Jadi pada kode dibawah data yang akan diambil pada path=system dan authority =
settings, authority adalah kode kata unik untuk mengakses ContentProvider
Cursor
cursor = cr.query(Settings.System.CONTENT_URI, null, null, null, null);
//
Manage cursor, cursor adalah objek untuk mengakses data
startManagingCursor(cursor);
//
Setting ListView dengan data dari cursor dan menggunakan UI row.xml untuk
display datanya
ListView
listView = (ListView) findViewById(R.id.listView);
String[] from = { Settings.System.NAME, Settings.System.VALUE };
int[] to = { R.id.textName, R.id.textValue };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(),
R.layout.row, cursor, from, to);
listView.setAdapter(adapter);
Output
dari program ini , Ketika anda klik button pada MainActivity maka ListView akan
diisi dengan data informasi device Anda.
Selain
ContentProvider yang sudah ada sebagai default. kita juga bisa membuat content
provider sendiri.
Context
• The Context class provides global access to the
applications environment
• Only class methods are used
▫ e.g. Context.getResources() returns all available
resources in the application
• The context is used to do things like register handlers
for broadcast messages, look up resources, access string tables, access the
applications home directory and so on
• Activities are launched with Context.startActivity,
services with Context.startService
• Messages can be sent to all BroadcastReceivers with
sendBroadcast
Sumber: dari berbagai sumber