Latest web development tutorials

Layanan Android (Service)

Layanan adalah komponen berjalan di latar belakang, pelaksanaan tugas berjalan lama dan tidak memerlukan interaksi pengguna. Bahkan jika aplikasi ini hancur juga masih bekerja. Layanan yang terdiri dasarnya dua negara -

negara deskripsi
mulai komponen aplikasi Android, seperti kegiatan, melalui startService () untuk memulai layanan, layanan ini Dimulai negara. Setelah dimulai, layanan dapat berjalan di latar belakang tanpa batas waktu, waktu peluncuran komponennya telah hancur.
terikat Ketika komponen aplikasi Android melalui bindService () untuk mengikat layanan, layanan ini negara Bound. Terikat layanan negara menyediakan antarmuka client-server untuk memungkinkan komponen untuk berinteraksi dengan layanan, seperti mengirim permintaan untuk mendapatkan hasil, bahkan untuk komunikasi antar-proses melalui IPC.

Layanan memiliki pendekatan siklus hidup dapat diterapkan untuk memantau perubahan status layanan dapat dilakukan pada tahap yang sesuai. Berikut ini menunjukkan kiri ketika layanan () dibuat oleh startService ketika periode deklarasi, kanan ditampilkan ketika layanan () diciptakan oleh siklus hidup bindService:

gambargambar

Untuk membuat layanan ini, Anda perlu membuat sebuah kelas yang mewarisi dari Dinas kelas dasar atau kelas Java diketahui subclass-nya. kelas layanan dasar mendefinisikan metode yang berbeda dan metode callback yang paling penting. Anda tidak perlu untuk mengimplementasikan semua metode callback. Namun demikian, untuk memahami semua metode ini sangat penting. callback ini dapat memastikan bahwa aplikasi Anda untuk secara pengguna yang diinginkan.

callback deskripsi
onStartCommand () komponen lain (seperti aktivitas) dengan memanggil startService () untuk memulai permintaan layanan, sistem panggilan metode. Jika Anda menerapkan metode ini, Anda memiliki tanggung jawab untuk menghentikan layanan ketika pekerjaan selesai dengan stopSelf () atau stopService () metode.
onBind Bila Anda ingin mengikat komponen dan jasa lainnya melalui bindService (), sistem panggilan metode. Jika Anda menerapkan metode ini, Anda perlu kembali IBinder objek untuk menyediakan antarmuka bagi pelanggan untuk berkomunikasi dengan layanan. Anda harus menerapkan metode ini, jika Anda tidak mengizinkan mengikat, hanya kembali nol.
onUnbind () Ketika antarmuka pelanggan untuk semua rilis layanan interupsi khusus, sistem panggilan metode.
onRebind () Ketika koneksi klien baru untuk layanan, dan setelah itu telah terputus oleh onUnbind (Intent) notifikasi, sistem panggilan metode.
onCreate () Ketika layanan melalui onStartCommand () dan onBind () pertama kali dibuat, sistem panggilan metode. panggilan membutuhkan pelaksanaan instalasi satu kali.
onDestroy () Ketika layanan ini tidak lagi berguna atau hancur, sistem panggilan metode. layanan Anda perlu menerapkan metode ini untuk membersihkan setiap sumber daya, seperti benang, pendengar terdaftar, penerima, dan sebagainya.

Layanan utama berikut menunjukkan siklus hidup dari masing-masing metode -

package cn.uprogrammer.androidservices;

import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
import android.os.Bundle;

public class HelloService extends Service {

    /** 标识服务如果被杀死之后的行为 */
    int mStartMode;

    /** 绑定的客户端接口 */
    IBinder mBinder;

    /** 标识是否可以使用onRebind */
    boolean mAllowRebind;

    /** 当服务被创建时调用. */
    @Override
    public void onCreate() {

    }

    /** 调用startService()启动服务时回调 */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return mStartMode;
    }

    /** 通过bindService()绑定到服务的客户端 */
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    /** 通过unbindService()解除所有客户端绑定时调用 */
    @Override
    public boolean onUnbind(Intent intent) {
        return mAllowRebind;
    }

    /** 通过bindService()将客户端绑定到服务时调用*/
    @Override
    public void onRebind(Intent intent) {

    }

    /** 服务不再有用且将要被销毁时调用 */
    @Override
    public void onDestroy() {

    }
}

contoh

Contoh ini akan menunjukkan langkah-langkah sederhana tentang cara membuat layanan Android Anda sendiri. Ikuti langkah-langkah untuk memodifikasi aplikasi Android yang dibuat sebelumnya di bagian Contoh Hello World:

langkah deskripsi
1 Menggunakan Android Studio IDE untuk membuat aplikasi Android dan nama androidservices di cn.uprogrammer.androidservices paket. Contoh yang sama bagian Hello World.
2 Memodifikasi file utama MainActivity.java aktif menambahkan startService () dan metode stopService ().
3 Buat MyService.java berkas Java baru dalam paket cn.uprogrammer.androidservices. File ini akan membuat Android terkait layanan metode.
4 Untuk menentukan layanan menggunakan <layanan ... /> tag di file AndroidManifest.xml. Sebuah aplikasi dapat memiliki satu atau lebih layanan tanpa batasan apapun.
5 Modifikasi res / layout / berkas activity_main.xml di layout default, tata letak secara online berisi dua tombol.
6 Jangan res / values ​​/ strings.xml mengajukan konstanta apapun untuk dimodifikasi. Android Studio akan mencatat nilai string.
7 Luncurkan emulator Android untuk menjalankan aplikasi dan memverifikasi hasil perubahan yang dibuat untuk aplikasi.

Berikut adalah file utama aktivitas file src / cn.uprogrammer.androidservices / MainActivity.java konten dimodifikasi. File ini berisi semua pendekatan siklus hidup dasar. Kami telah menambahkan startService () dan metode stopService () untuk memulai dan menghentikan layanan.

package cn.uprogrammer.androidservices;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;


import android.content.Intent;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    // Method to start the service
    public void startService(View view) {
        startService(new Intent(getBaseContext(), MyService.class));
    }

    // Method to stop the service
    public void stopService(View view) {
        stopService(new Intent(getBaseContext(), MyService.class));
    }
}

Berikut ini adalah isi dari src / cn.uprogrammer.androidservices / MyService.java dari. File ini dapat menerapkan satu atau lebih layanan yang terkait dengan metode berdasarkan permintaan. Untuk pendatang baru, kami hanya menyadari onStartCommand () dan onDestroy () -

package cn.uprogrammer.androidservices;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class MyService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // Let it continue running until it is stopped.
        Toast.makeText(this, "服务已经启动", Toast.LENGTH_LONG).show();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "服务已经停止", Toast.LENGTH_LONG).show();
    }
}

Kami akan memodifikasi file AndroidManifest.xml. Berikut menambahkan <layanan ... /> tag untuk mencakup layanan kami:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.androidservices"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-sdk
        android:minSdkVersion="13"
        android:targetSdkVersion="22" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

        </activity>

        <service android:name=".MyService" />

    </application>

</manifest>

Berikut ini adalah isi dari res / layout / berkas activity_main.xml berisi dua tombol:

<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" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Android 服务实例"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textSize="30dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="www.uprogrammer.cn"
        android:textColor="#ff87ff09"
        android:textSize="30dp"
        android:layout_above="@+id/imageButton"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="40dp" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton"
        android:src="@drawable/ic_launcher"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button2"
        android:text="启动服务"
        android:onClick="startService"
        android:layout_below="@+id/imageButton"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止服务"
        android:id="@+id/button"
        android:onClick="stopService"
        android:layout_below="@+id/button2"
        android:layout_alignLeft="@+id/button2"
        android:layout_alignStart="@+id/button2"
        android:layout_alignRight="@+id/button2"
        android:layout_alignEnd="@+id/button2" />

</RelativeLayout>

Berikut adalah isi dari res / values ​​/ strings.xml adalah untuk mendefinisikan dua konstanta baru:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Android Services</string>
    <string name="title_activity_main">MainActivity</string>
    <string name="menu_settings">Settings</string>
    <string name="action_settings">Settings</string>

</resources>

Mari kita jalankan dimodifikasi My aplikasi Aplikasi. Saya berasumsi bahwa Anda telah membuat AVD selama lingkungan instalasi. Buka proyek Anda dalam file yang aktif, klik pada toolbar gambar Icon untuk menjalankan aplikasi Dalam Android Studio. Android Studio menginstal aplikasi pada AVD dan mulai itu. Jika semua berjalan dengan baik, itu akan ditampilkan pada jendela emulator sebagai berikut:

gambar

Sekarang klik pada tombol "Start Service" untuk memulai layanan, yang akan mengeksekusi onStartCommand kita menulis () metode, "layanan telah meluncurkan" muncul di bagian bawah simulator, sebagai berikut:

gambar

Klik di bagian bawah tombol "keluar dari layanan", Anda dapat menghentikan layanan.