Background Service Example
Service เป็นโปรแกรมส่วนที่สามารถทำงานแบบระยะนาน
แบบทำงานอยู่เบื้องหลังและไม่มีส่วนติดต่อผู้ใช้งาน แม้ว่าผู้ใช้จะสลับไปยังโปรแกรมประยุกต์อื่นๆ
โปรแกรมอื่นๆ สามารถทำงานได้ตามปกติ Service ยังสามารถที่จะ รับส่งข้อมูลเพื่อ ที่จะติดต่อกันกับ Service ( Bind Service ) และสื่อสารแบบ IPC ได้ด้วย ตัวอย่างเช่น Service อาจจะเชื่อมต่อเครือข่าย(Network ) ,เล่นเพลง
( Media Player ) ,ติดต่อ
Input/Output หรือติดต่อ
กับ database โดยทำงานอยู่เบื้องหลัง
A
Service
is an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start a service and it will continue to run in the background even if the user switches to another application. Additionally, a component can bind to a service to interact with it and even perform interprocess communication (IPC). For example, a service might handle network transactions, play music, perform file I/O, or interact with a content provider, all from the background.
A service can essentially take two forms:
- Started
- A service is "started" when an application component (such as an activity) starts it by calling
startService()
. Once started, a service can run in the background indefinitely, even if the component that started it is destroyed. Usually, a started service performs a single operation and does not return a result to the caller. For example, it might download or upload a file over the network. When the operation is done, the service should stop itself. - Bound
- A service is "bound" when an application component binds to it by calling
bindService()
. A bound service offers a client-server interface that allows components to interact with the service, send requests, get results, and even do so across processes with interprocess communication (IPC). A bound service runs only as long as another application component is bound to it. Multiple components can bind to the service at once, but when all of them unbind, the service is destroyed.
Although this documentation generally discusses these two types of services separately, your service can work both ways—it can be started (to run indefinitely) and also allow binding. It's simply a matter of whether you implement a couple callback methods:
onStartCommand()
to allow components to start it and onBind()
to allow binding.
Regardless of whether your application is started, bound, or both, any application component can use the service (even from a separate application), in the same way that any component can use an activity—by starting it with an
Intent
. However, you can declare the service as private, in the manifest file, and block access from other applications. This is discussed more in the section about Declaring the service in the manifest.Background Service Example Code
This code call startService then play sound in MediaPlayer in Service.
Click Notification to Stop Service.
MainActivity.java Code
package
code.example.service;
import
android.app.Activity;
import
android.content.Intent;
import
android.os.Bundle;
import
android.view.Menu;
import
android.view.View;
import
android.widget.Button;
public class
MainActivity extends Activity {
Button btnService,btnStop;
@Override
protected void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnService =
(Button)findViewById(R.id.buttonStart);
btnStop =
(Button)findViewById(R.id.buttonStop);
btnService.setOnClickListener(new
View.OnClickListener() {
@Override
public void
onClick(View arg0) {
// Make
sure the service is started. It will
continue running
// until someone calls
stopService(). The Intent we use to find
// the service explicitly specifies
our service component, because
// we want it running in our own
process and don't want other
// applications to replace it.
startService(new
Intent(MainActivity.this, HelloService.class));
finish();
}
});
btnStop.setOnClickListener(new
View.OnClickListener() {
@Override
public void
onClick(View arg0) {
// Cancel
a previous call to startService(). Note
that the
// service will not actually stop at
this point if there are
// still bound clients.
stopService(new Intent(MainActivity.this,
HelloService.class));
}
});
}
@Override
public Boolean
onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items
to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
HelloService,java Code
package
code.example.service;
import
android.app.Notification;
import
android.app.NotificationManager;
import
android.app.PendingIntent;
import
android.app.Service;
import
android.content.Intent;
import
android.media.MediaPlayer;
import
android.os.IBinder;
public class
HelloService extends Service {
NotificationManager nm;
MediaPlayer mMediaPlayer;
//@Override
public void onCreate()
{
super.onCreate();
Thread loop = new Thread(new Runnable()
{
@Override
public void run() {
while (true){
if(mMediaPlayer != null){
mMediaPlayer.release();
}
mMediaPlayer =
MediaPlayer.create(HelloService.this, R.raw.sound_ping);
mMediaPlayer.start();
try {
Thread.sleep(1500);
} catch
(InterruptedException e) {
e.printStackTrace();
}
}//while
}
});
loop.start();
}
@SuppressWarnings("deprecation")
@Override
public void
onStart(Intent intent, int startId) {
super.onStart(intent,
startId);
nm = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
// User clicked the notification.
Need to stop the service.
if (intent != null &&
intent.getAction() != null
&&
intent.getAction().equals("stop")) {
nm.cancel(0);
stopSelf();
System.exit(0);
} else {
// Service starting. Create a
notification.
Notification notification = new Notification(
R.drawable.ic_launcher, "Service
running",System.currentTimeMillis());
notification.setLatestEventInfo(this, "Service
Running", "Click to Stop",
PendingIntent.getService(this, 0, new Intent(
"stop", null, this, this.getClass()),
0));
notification.flags |=
Notification.FLAG_ONGOING_EVENT;
nm.notify(0, notification);
}
}//onStart
@Override
public IBinder
onBind(Intent intent) {
return null;
}
// public class LocalBinder extends Binder {
// HelloService getService() {
// return HelloService.this;
// }
// }
//
// @Override
// public IBinder onBind(Intent arg0) {
// return mBinder;
// }
//
// // This is the object that receives
interactions from clients. See
// // RemoteService for a more complete
example.
// private final IBinder mBinder = new
LocalBinder();
}
AndroidManifest.xml Code
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="code.example.service"
android:versionCode="1"
android:versionName="1.0"
>
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="15" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>
<activity
android:name="code.example.service.MainActivity"
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="HelloService" />
</application>
</manifest>
Download Background Service Example Code
สอนเขียน Android สอนเขียนโปรแกรม Android แบบ Online
รับสอนเขียนโปรแกรม Android App สอนแบบ online สอนสด ตัวต่อตัว หรือ เป็นกลุ่ม ได้ทั่วประเทศ กำหนดเวลาเรียนได้
การเรียน Android App แบบ online สามารถกำหนดเวลาเรียน เองได้ ตามแต่ตกลงกัน
( รับสอน นอกสถานที่ แบบเป็น กลุ่ม ทั่วประเทศ )
แต่ละ Course ขึ้นอยู่กับพื้นฐานที่มี นะครับ
Course
1.JAVA Programming สำหรับผู้ที่ยังไม่มีพื้นฐานทางด้าน การเขียนโปรแกรม JAVA
เรียน 3-4 ครั้ง ครั้งละ 2 ชั่วโมง
2.Beginning Android Development เริ่มต้นการพัฒนาด้วย Android ( ต้องมีพื้นฐาน JAVA แล้ว )
เรียน 5-6 ครั้ง ครั้งละ 2 ชั่วโมง
เรียนจบคอร์สนี้ ก็สามารถทำ Application ได้แล้ว
3.Android Application สอนตามความต้องการในการเขียนโปรแกรม ใช้งานจริง เช่น โปรแกรมใช้งานด้านต่างๆ
ระยะเวลา และ ค่าเรียน ตามแต่ความยากง่ายของโปรแกรม ซึ่งอาจจะรวมสอน JAVA Programming ด้วยสำหรับผู้เริ่มต้นเลย
ดังนั้น ราคาสอน จะขึ้นอยู่กับ สเปคงาน
โปรแกรมที่ใช้ทำการเรียน Team Viewer Version ล่าสุด Version 8
Meeting ID จะแจ้งให้ก่อนเรียน ผ่านทาง email sms Line หรือ อื่นๆ ตามสะดวก
ใช้ Tab Meeting ใส่ Meeting ID และใส่ชื่อ
แล้ว Join Meeting
ติดต่อ amphancm@gmail.com
ติดต่อ amphancm@gmail.com