ก่อนเข้าตัวอย่างเราควรรู้ว่าบริการใน Android คืออะไร บริการจะดำเนินการเบื้องหลังโดยไม่มีการโต้ตอบกับ UI และทำงานได้แม้หลังจากกิจกรรมถูกทำลาย
ตัวอย่างนี้สาธิตเกี่ยวกับวิธีการสร้างบริการ Android ที่ dalvik จะไม่ฆ่า
ขั้นตอนที่ 1 − สร้างโครงการใหม่ใน Android Studio ไปที่ไฟล์ ⇒ โครงการใหม่และกรอกรายละเอียดที่จำเป็นทั้งหมดเพื่อสร้างโครงการใหม่
ขั้นตอนที่ 2 − เพิ่มรหัสต่อไปนี้ใน res/layout/activity_main.xml
ในโค้ดข้างต้น เราได้ดูข้อความ เมื่อผู้ใช้คลิกที่มุมมองข้อความ จะเริ่มให้บริการและหยุดบริการ
ขั้นตอนที่ 3 − เพิ่มรหัสต่อไปนี้ใน src/MainActivity.java
แพ็คเกจ com.example.andy.myapplication;นำเข้า android.app.ActivityManager;นำเข้า android.content.Context;นำเข้า android.content.Intent;นำเข้า android.support.v7.app.AppCompatActivity;นำเข้า android.os.Bundle นำเข้า android.util.Log นำเข้า android.view.View นำเข้า android.widget.TextView คลาสสาธารณะ MainActivity ขยาย AppCompatActivity { @Override ป้องกันโมฆะ onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView(R.layout.activity_main); ข้อความ TextView สุดท้าย =findViewById (R.id.text); text.setOnClickListener (View.OnClickListener ใหม่ () { @แทนที่โมฆะสาธารณะ onClick (ดู v) { ถ้า (isMyServiceRunning (service.class)) { text.setText ("หยุด"); stopService (เจตนาใหม่ (MainActivity.this บริการ) .class)); } else { text.setText ("Started"); startService (เจตนาใหม่ (MainActivity.this, service.class)); } } }); } บูลีนส่วนตัว isMyServiceRunning (คลาส > serviceClass) { ตัวจัดการกิจกรรม =(ActivityManager) getSystemService (Context.ACTIVITY_SERVICE); สำหรับ (ActivityManager.RunningServiceInfo บริการ:manager.getRunningServices (Integer.MAX_VALUE)) { if (serviceClass.getName().equals(service.service.getClassName())) { คืนค่าเป็น true; } } คืนค่าเท็จ }}
ในรหัสด้านบนเพื่อเริ่มและหยุดบริการ เราใช้เจตนาและผ่านบริบทและคลาสบริการ ตอนนี้สร้างคลาสบริการในโฟลเดอร์แพ็คเกจเป็น service.class และเพิ่มรหัสต่อไปนี้ –
แพ็คเกจ com.example.andy.myapplication;นำเข้า android.annotation.SuppressLint;นำเข้า android.annotation.TargetApi;นำเข้า android.app.Notification;นำเข้า android.app.NotificationChannel;นำเข้า android.app.NotificationManager;นำเข้า android app.PendingIntent นำเข้า android.app.Service นำเข้า android.content.Context นำเข้า android.content.Intent นำเข้า android.graphics.Color นำเข้า android.media.MediaPlayer นำเข้า android.os.Build นำเข้า android.os .IBinder นำเข้า android.os.PowerManager นำเข้า android.support.annotation.RequiresApi นำเข้า android.support.v4.app.NotificationCompat นำเข้า android.util.Log นำเข้า android.widget.Toast บริการคลาสสาธารณะขยายบริการ { PowerManager น.; @SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wl; @ แทนที่ IBinder สาธารณะ onBind (เจตนาเจตนา) { คืนค่า null; } @SuppressLint ("InvalidWakeLockTag") @ แทนที่โมฆะสาธารณะ onCreate () { super.onCreate (); pm =(PowerManager) getSystemService (Context.POWER_SERVICE); wl =pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK "แท็กของฉัน"); } @TargetApi(Build.VERSION_CODES.O) @RequiresApi(api =Build.VERSION_CODES.JELLY_BEAN) @Override สาธารณะ int onStartCommand (เจตนาเจตนา แฟล็ก int int startId) { wl.acquire(); //ทำงานบางอย่าง Toast.makeText(นี่คือ "บริการแจ้งเตือนที่เริ่มต้นโดยผู้ใช้", Toast.LENGTH_LONG).show(); ส่งคืน START_STICKY; } @RequiresApi(api =Build.VERSION_CODES.N) @Override public void onDestroy() { super.onDestroy(); wl.release(); Toast.makeText(นี่คือ "บริการแจ้งเตือนถูกทำลายโดยผู้ใช้", Toast.LENGTH_LONG).show(); }}
ในโค้ดข้างต้น เราได้เรียกตัวจัดการพลังงานเพื่อหยุดการล็อกหน้าจอ ดังนั้นเธรดของ Android จะไม่หยุดเธรดบริการดังที่แสดงด้านล่าง –
@SuppressLint("InvalidWakeLockTag")@Overridepublic ถือเป็นโมฆะ onCreate() { super.onCreate(); pm =(PowerManager) getSystemService (Context.POWER_SERVICE); wl =pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");}@TargetApi(Build.VERSION_CODES.O)@RequiresApi(api =Build.VERSION_CODES.JELLY_BEAN)@Overridepublic int onStartCommand(Intent intent, int start flags ) { wl.acquire(); //ทำงานบางอย่าง Toast.makeText(นี่คือ "บริการแจ้งเตือนที่เริ่มต้นโดยผู้ใช้", Toast.LENGTH_LONG).show(); ส่งคืน START_STICKY;}@RequiresApi(api =Build.VERSION_CODES.N)@Overridepublic void onDestroy() { super.onDestroy(); wl.release(); Toast.makeText(นี่คือ "บริการแจ้งเตือนถูกทำลายโดยผู้ใช้", Toast.LENGTH_LONG).show();}
ขั้นตอนที่ 4 − เพิ่มรหัสต่อไปนี้ใน manifest.xml
<หมวดหมู่ android:name ="android.intent.category.LAUNCHER" />
มาลองเรียกใช้แอปพลิเคชันของคุณกัน ฉันคิดว่าคุณได้เชื่อมต่ออุปกรณ์มือถือ Android จริงกับคอมพิวเตอร์ของคุณ ในการรันแอพจาก android studio ให้เปิดไฟล์กิจกรรมของโปรเจ็กต์แล้วคลิกไอคอน Run จากแถบเครื่องมือ เลือกอุปกรณ์มือถือของคุณเป็นตัวเลือก จากนั้นตรวจสอบอุปกรณ์มือถือของคุณซึ่งจะแสดงหน้าจอเริ่มต้นของคุณ –
ในผลลัพธ์ข้างต้นเป็นหน้าจอเริ่มต้น คลิกที่ Text view จะเป็นการเริ่มบริการแจ้งเตือนดังที่แสดงด้านล่าง –
จากผลด้านบนนี้ บริการได้เริ่มขึ้นแล้ว คลิกที่ Text View จะหยุดให้บริการแจ้งเตือนดังภาพ -