บทช่วยสอน บริการ Android (Service) ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ ตัวอย่าง,
บริการเป็นส่วนประกอบที่ทำงานในพื้นหลังการดำเนินงานของงานที่รันเป็นเวลานานและไม่จำเป็นต้องมีการโต้ตอบกับผู้ใช้ แม้ว่าโปรแกรมจะถูกทำลายนอกจากนี้ยังยังคงทำงาน บริการประกอบไปด้วยหลักสองสหรัฐอเมริกา -
รัฐ | ลักษณะ |
---|---|
เริ่มต้น | ส่วนประกอบโปรแกรมหุ่นยนต์เช่นกิจกรรมของรัฐผ่าน 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 | เพื่อกำหนดบริการที่ใช้ <บริการ th. /> แท็กในไฟล์ 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 นี่เพิ่ม <บริการ th. /> แท็กจะรวมถึงการบริการของเรา:
<?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 เราเขียนวิธี () "บริการที่ได้รับการเปิดตัว" ปรากฏที่ด้านล่างของจำลองดังต่อไปนี้:
คลิกที่ด้านล่างของปุ่ม "ออกจากบริการ" ที่คุณสามารถหยุดให้บริการ