Latest web development tutorials

บริการ Android (Service)

บริการเป็นส่วนประกอบที่ทำงานในพื้นหลังการดำเนินงานของงานที่รันเป็นเวลานานและไม่จำเป็นต้องมีการโต้ตอบกับผู้ใช้ แม้ว่าโปรแกรมจะถูกทำลายนอกจากนี้ยังยังคงทำงาน บริการประกอบไปด้วยหลักสองสหรัฐอเมริกา -

รัฐ ลักษณะ
เริ่มต้น ส่วนประกอบโปรแกรมหุ่นยนต์เช่นกิจกรรมของรัฐผ่าน startService () เพื่อเริ่มบริการบริการเริ่ม เมื่อเริ่มต้นบริการสามารถทำงานในพื้นหลังอย่างไม่มีกำหนดเปิดตัวในเวลาที่เหมาะสมของส่วนประกอบของมันได้ถูกทำลาย
ขอบเขต เมื่อส่วนประกอบการประยุกต์ใช้ Android ผ่าน bindService () เพื่อผูกบริการการบริการที่เป็นรัฐที่ถูกผูกไว้ ให้บริการของรัฐที่ถูกผูกไว้ให้อินเตอร์เฟซไคลเอนต์เซิร์ฟเวอร์ที่จะอนุญาตให้ส่วนประกอบในการโต้ตอบกับบริการเช่นการส่งคำขอเพื่อให้ได้ผลลัพธ์ที่แม้สำหรับการสื่อสารระหว่างกระบวนการผ่าน IPC

บริการมีวิธีวงจรชีวิตสามารถดำเนินการเพื่อตรวจสอบการเปลี่ยนแปลงสถานะของบริการสามารถดำเนินการในขั้นตอนที่เหมาะสม ต่อไปนี้จะแสดงให้เห็นด้านซ้ายเมื่อบริการ () ถูกสร้างขึ้นโดย startService เมื่อระยะเวลาการประกาศสิทธิที่จะปรากฏขึ้นเมื่อบริการ () ถูกสร้างขึ้นโดยวงจรชีวิต bindService:

ภาพภาพ

เพื่อสร้างการบริการที่คุณจำเป็นต้องสร้างคลาสที่สืบทอดจากบริการชั้นฐานหรือที่รู้จักกัน subclass เรียน Java ของมัน ชั้นฐานบริการกำหนดวิธีการที่แตกต่างกันและวิธีการโทรกลับที่สำคัญที่สุด คุณไม่จำเป็นต้องดำเนินการทั้งหมดของวิธีการติดต่อกลับ อย่างไรก็ตามเพื่อให้เข้าใจวิธีการทั้งหมดเป็นสิ่งสำคัญมาก เรียกกลับเหล่านี้สามารถมั่นใจได้ว่าแอพลิเคชันของคุณเพื่อลักษณะที่ต้องการของผู้ใช้

โทรกลับ ลักษณะ
onStartCommand () ส่วนประกอบอื่น ๆ (เช่นกิจกรรม) โดยการเรียก startService () เพื่อเริ่มต้นการร้องขอบริการระบบเรียกวิธีการ หากคุณใช้วิธีนี้คุณมีความรับผิดชอบในการหยุดให้บริการเมื่องานเสร็จสมบูรณ์โดย stopSelf () หรือ stopService () วิธีการ
onBind เมื่อคุณต้องการที่จะผูกส่วนประกอบอื่น ๆ และบริการผ่าน bindService () ระบบเรียกวิธีการ หากคุณใช้วิธีนี้คุณต้องกลับวัตถุ IBinder เพื่อให้อินเตอร์เฟซสำหรับลูกค้าในการสื่อสารกับการให้บริการ คุณต้องใช้วิธีนี้ถ้าคุณไม่อนุญาตให้มีผลผูกพันก็กลับ null
onUnbind () เมื่อลูกค้าอินเตอร์เฟซสำหรับการเปิดตัวบริการพิเศษทั้งหมดขัดจังหวะระบบเรียกวิธีการ
onRebind () เมื่อมีการเชื่อมต่อลูกค้าใหม่ที่จะให้บริการและหลังจากที่ได้รับการตัดการเชื่อมต่อโดย onUnbind (เจตนา) การแจ้งเตือนระบบเรียกวิธีการ
onCreate () เมื่อบริการผ่าน onStartCommand () และ onBind () จะสร้างขึ้นครั้งแรกระบบจะเรียกวิธีการ โทรต้องมีการดำเนินการติดตั้งเพียงครั้งเดียว
OnDestroy () เมื่อการให้บริการที่ไม่มีประโยชน์หรือทำลายระบบเรียกวิธีการ บริการของคุณจำเป็นต้องใช้วิธีการนี้ในการทำความสะอาดทรัพยากรใด ๆ เช่นกระทู้, ฟังลงทะเบียน, รับ, และอื่น ๆ

บริการหลักดังต่อไปนี้แสดงให้เห็นถึงวงจรชีวิตของแต่ละวิธี -

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() {

    }
}

ตัวอย่าง

ตัวอย่างนี้จะแสดงขั้นตอนง่ายๆในการสร้างบริการของคุณเอง Android ทำตามขั้นตอนเหล่านี้เพื่อปรับเปลี่ยนการประยุกต์ใช้ Android ที่สร้างขึ้นก่อนหน้านี้ในส่วนของตัวอย่าง Hello World:

ขั้นตอน ลักษณะ
1 โดยใช้ Android Studio IDE ในการสร้างแอพลิเคชัน Android และ androidservices ชื่อที่แพคเกจ cn.uprogrammer.androidservices ตัวอย่างที่คล้ายกันส่วน Hello World
2 แก้ไขไฟล์ที่ใช้งานหลัก MainActivity.java เพิ่ม startService () และ stopService () วิธีการ
3 สร้าง MyService.java ไฟล์ Java ใหม่ใน cn.uprogrammer.androidservices แพคเกจ ไฟล์นี้จะทำให้ Android วิธีการบริการที่เกี่ยวข้องกับ
4 เพื่อกำหนดบริการที่ใช้ <บริการ ... /> แท็กในไฟล์ AndroidManifest.xml โปรแกรมประยุกต์ที่สามารถมีได้มากกว่าหนึ่งบริการโดยไม่มีข้อ จำกัด ใด ๆ
5 ปรับเปลี่ยนความละเอียด / รูปแบบไฟล์ / activity_main.xml ในรูปแบบเริ่มต้นรูปแบบออนไลน์ที่มีสองปุ่ม
6 อย่า Res / ค่า / strings.xml ยื่นค่าคงที่ใด ๆ ที่จะได้รับการแก้ไข Android สตูดิโอจะทราบค่าสตริง
7 เปิดตัวโปรแกรมจำลอง Android เพื่อเรียกใช้โปรแกรมประยุกต์และตรวจสอบผลของการเปลี่ยนแปลงที่เกิดขึ้นกับแอพลิเคชัน

นี่คือกิจกรรมไฟล์ไฟล์ src / cn.uprogrammer.androidservices / MainActivity.java หลักปรับเปลี่ยนเนื้อหา ไฟล์นี้มีวิธีการที่วงจรชีวิตขั้นพื้นฐาน เราได้เพิ่ม startService () และ stopService () วิธีการเริ่มต้นและหยุดให้บริการ

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));
    }
}

ต่อไปนี้เป็นเนื้อหาของ src / cn.uprogrammer.androidservices / MyService.java ของ ไฟล์นี้สามารถดำเนินการอย่างใดอย่างหนึ่งหรือมากกว่าบริการที่เกี่ยวข้องกับวิธีการตามความต้องการ สำหรับผู้มาใหม่เราตระหนัก onStartCommand () และ 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();
    }
}

เราจะแก้ไขไฟล์ AndroidManifest.xml นี่เพิ่ม <บริการ ... /> แท็กจะรวมถึงการบริการของเรา:

<?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>

ต่อไปนี้เป็นเนื้อหาของ Res / รูปแบบไฟล์ / 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" 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>

นี่คือเนื้อหาของ Res / ค่า / strings.xml คือการกำหนดค่าคงที่สองใหม่:

<?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>

ขอเพียงแค่เรียกใช้แอพลิเคชันการแก้ไขใบสมัครของฉัน ผมถือว่าคุณได้สร้างสภาพแวดล้อม AVD ระหว่างการติดตั้ง เปิดโครงการในไฟล์ที่ใช้งานให้คลิกบนแถบเครื่องมือ ภาพ ไอคอนเพื่อเรียกใช้โปรแกรมประยุกต์ใน Android สตูดิโอ สตูดิโอหุ่นยนต์ติดตั้งโปรแกรมประยุกต์บน AVD และเริ่มมัน หากทุกอย่างไปได้ดีก็จะปรากฏบนหน้าต่างจำลองดังต่อไปนี้:

ภาพ

ตอนนี้คลิกที่ปุ่ม "Start บริการ" ที่จะเริ่มต้นการให้บริการที่จะดำเนินการ onStartCommand เราเขียนวิธี () "บริการที่ได้รับการเปิดตัว" ปรากฏที่ด้านล่างของจำลองดังต่อไปนี้:

ภาพ

คลิกที่ด้านล่างของปุ่ม "ออกจากบริการ" ที่คุณสามารถหยุดให้บริการ