サービスの基本的な使い方
8373 ワード
一、サービスの定義
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
......
......
二、サービスの起動と停止
1.Intentを作成し、アクティビティでstartService()メソッドでサービスを開始します.
Intent startIntent = new Intent(this, MyService.class);
startService(startIntent); //
2.Intentを作成し、アクティビティでstopService()メソッドでサービスを停止します.
Intent stopIntent = new Intent(this, MyService.class);
stopService(stopIntent); //
三、活動とサービスの通信
MyServiceでは、
1.内部クラスの作成MyBinderはBinderから継承され、アクティビティが呼び出す必要がある内容が含まれています.
2.MyServiceでMyBinderのインスタンスを作成します.
3.onBind()メソッドでこのインスタンスmBinderを返します.
public class MyService extends Service {
private DownloadBinder mBinder = new DownloadBinder();
class DownloadBinder extends Binder {
public void startDownload() {
Log.d("MyService", "startDownload executed");
}
public int getProgress() {
Log.d("MyService", "getProgress executed");
return 0;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
.....
}
MainActivity:
1.ServiceConnectionの匿名クラスインスタンスを作成し、onServiceConnected()メソッドとonServiceDisconnected()メソッドを書き換えます.
2.onServiceConnected()メソッドでは、MyBinderのインスタンスをダウンシフトして取得します.
アクティビティとサービスのバインド:
1.Intentを作成します.
2.bindService()メソッドでアクティビティとサービスをバインドします.
3.unbindService()メソッドでバインドを解除します.
public class MainActivity extends Activity implements OnClickListener {
private Button startService;
private Button stopService;
private Button bindService;
private Button unbindService;
private MyService.DownloadBinder downloadBinder;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
downloadBinder = (MyService.DownloadBinder) service;
downloadBinder.startDownload();
downloadBinder.getProgress();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
......
bindService = (Button) findViewById(R.id.bind_service);
unbindService = (Button) findViewById(R.id.unbind_service);
bindService.setOnClickListener(this);
unbindService.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
......
case R.id.bind_service:
Intent bindIntent = new Intent(this, MyService.class);
bindService(bindIntent, connection, BIND_AUTO_CREATE); //
break;
case R.id.unbind_service:
unbindService(connection); //
break;
default:
break;
}
}
}
四、サービスのライフサイクル
五、サービスのもっと多くのテクニック
1.フロントサービスの利用
Notification.Builder builder = new Notification.Builder(MainActivity.this);
builder.setSmallIcon(R.drawable.ic_launcher);
builder.setContentTitle("title");
builder.setContentText("text");
builder.setWhen(System.currentTimeMillis()); //
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
PendingIntent pi=PendingIntent.getActivity(MainActivity.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
builder.setContentIntent(pi);
Notification notification = builder.build();
startForeground(1, notification);
使いやすいのは、Notificationメソッドのmanagerを作成することです.notify(1, notification); startForeground(1,notification);.
2.IntentServiceの使用
したがって、
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
//
stopSelf();
}
}).start();
return super.onStartCommand(intent, flags, startId);
}
}
public class MyIntentService extends IntentService {
public MyIntentService() {
super("MyIntentService"); //
}
@Override
protected void onHandleIntent(Intent intent) {
// id
Log.d("MyIntentService", "Thread id is " + Thread.currentThread().getId());
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("MyIntentService", "onDestroy executed");
}
}