Androidの4つのコンポーネントのサービス-Servicesの原理と応用開発の詳細
11957 ワード
一、Androidサービス概要
Serviceはandroidシステムの4つのコンポーネントの1つ(Activity、Service、BroadcastReceiver、ContentProvider)であり、Activityとのレベル差は多くありませんが、自分で実行することはできません.バックグラウンドでのみ実行でき、他のコンポーネントと対話できます.サービスは、マルチメディアを再生するときにユーザーが他のActivityを起動したときに、SDカード上のファイルの変化を検出したり、バックグラウンドで地理情報の位置の変化を記録したりするなど、バックグラウンドでプログラムを再生し続けなければならない場合が多いアプリケーションで使用できます.つまり、サービスは常にバックグラウンドに隠されています.
サービスの起動には2つの方法がある:context.startService()とcontext.bindService()
二、原理と流れ
1.通知バーアイコンを1つ提供し、startForegroundを呼び出すだけでフロントサービスを作成します.
2.サービスに自分のやりたいことをさせたい、簡単で、onCreateやonStartConmandの時にnewが1つのThreadでいい
3.ActivityなどのUIがサービスと通信したり、サービス提供を呼び出したりしたい場合、どうすればいいでしょうか.このときBinderを使う必要があります.onBindのときにIBinderオブジェクトを返すだけで、現在のサービスのオブジェクト参照を取得することができ、サービスが提供する方法を操作することができます.では、サービスでActivityを操作するにはどうすればいいですか.
Serviceリファレンスがあれば、この場合はServiceでActivityにコールバックインタフェースを開くだけです.
4.もちろん、サービスはManifestです.xmlで構成宣言を行います.
三、例:MyServices.java
四、サービス-MyServiceの使い方
真題園網:http://www.zhentiyuan.com
Serviceはandroidシステムの4つのコンポーネントの1つ(Activity、Service、BroadcastReceiver、ContentProvider)であり、Activityとのレベル差は多くありませんが、自分で実行することはできません.バックグラウンドでのみ実行でき、他のコンポーネントと対話できます.サービスは、マルチメディアを再生するときにユーザーが他のActivityを起動したときに、SDカード上のファイルの変化を検出したり、バックグラウンドで地理情報の位置の変化を記録したりするなど、バックグラウンドでプログラムを再生し続けなければならない場合が多いアプリケーションで使用できます.つまり、サービスは常にバックグラウンドに隠されています.
サービスの起動には2つの方法がある:context.startService()とcontext.bindService()
二、原理と流れ
1.通知バーアイコンを1つ提供し、startForegroundを呼び出すだけでフロントサービスを作成します.
2.サービスに自分のやりたいことをさせたい、簡単で、onCreateやonStartConmandの時にnewが1つのThreadでいい
3.ActivityなどのUIがサービスと通信したり、サービス提供を呼び出したりしたい場合、どうすればいいでしょうか.このときBinderを使う必要があります.onBindのときにIBinderオブジェクトを返すだけで、現在のサービスのオブジェクト参照を取得することができ、サービスが提供する方法を操作することができます.では、サービスでActivityを操作するにはどうすればいいですか.
Serviceリファレンスがあれば、この場合はServiceでActivityにコールバックインタフェースを開くだけです.
4.もちろん、サービスはManifestです.xmlで構成宣言を行います.
<service android:name="com.czm.servicetest.MyService" >
</service>
三、例:MyServices.java
package com.czm.servicetest;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
/**
* The Service Example
* @author caizhiming
*
*/
public class MyService extends Service{
IBinder mBinder = new MyBinder();
private int mCount = 0;
public boolean mIsStop = false;
// get the instance of MyService
public class MyBinder extends Binder{
MyService getService(){
return MyService.this;
}
}
public void setData(int data){
mCount = data;
}
public int getData(){
return mCount;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Thread thread = new Thread(null, new ServiceWorker(), "ServiceWorker");
thread.start();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.v("czm","onBind()-service is started");
return mBinder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.v("czm","onStartCommand()-service is started");
return super.onStartCommand(intent, flags, startId);
}
//The Service work's thread
class ServiceWorker implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
while(!mIsStop){
Log.v("czm","ServiceWorker: mCount="+mCount);
mCount ++;
if(mCount >= 10000){
mCount = 0;
}
if(mCount %5 == 0){
mListener.onCallback();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//The callback listener to operate UI such as Activity
private OnUICallbackListener mListener;
public void setListener(OnUICallbackListener listener){
mListener = listener;
}
public interface OnUICallbackListener{
void onCallback();
}
}
四、サービス-MyServiceの使い方
package com.czm.servicetest;
import com.czm.servicetest.MyService.MyBinder;
import com.czm.servicetest.MyService.OnUICallbackListener;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnUICallbackListener{
private Button mBtnStart;
private Button mBtnChange;
private Button mBtnStop;
private TextView mTvResult;
private MyService mMyService;
Intent serviceIntent;
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
mTvResult.setText(String.valueOf(mMyService.getData()));
mHandler.sendEmptyMessageDelayed(0, 1000);
};
};
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
Log.v("czm","onServiceDisconnected()");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
Log.v("czm","onServiceConnected()");
MyBinder binder = (MyBinder) service;
mMyService = binder.getService();
mMyService.setListener(MainActivity.this);
mHandler.sendEmptyMessageDelayed(0, 0);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnStart = (Button)findViewById(R.id.btn_start);
mBtnChange = (Button)findViewById(R.id.btn_change);
mBtnStop = (Button)findViewById(R.id.btn_stop);
mTvResult = (TextView)findViewById(R.id.tv_result);
mBtnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//start service
serviceIntent = new Intent(MainActivity.this,MyService.class);
serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//bind service in order to communicate with service
MainActivity.this.bindService(serviceIntent, mServiceConnection, BIND_AUTO_CREATE);
// startService(serviceIntent);
}
});
mBtnChange.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
mMyService.setData(1000);
}
});
mBtnStop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
mMyService.mIsStop = true;
MainActivity.this.unbindService(mServiceConnection);
stopService(serviceIntent);
}
});
}
/**
* service callback
* @param serviceConnection
*/
@Override
public void onCallback() {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "service callback", Toast.LENGTH_SHORT).show();
}
});
}
}
真題園網:http://www.zhentiyuan.com