1 生命周期图

Android 四大组件之 Service_第1张图片

2 第一种 非绑定方式 startService

2.1 自定义 Service

package com.demoservice;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.IBinder;import android.util.Log;public class FirstService extends Service {    MediaPlayer mplayer;    Binder binder=new Binder();    @Override    public IBinder onBind(Intent intent) {        // TODO 自动生成的方法存根        return binder;    }    @Override    public void onCreate() {        // TODO 自动生成的方法存根        super.onCreate();        mplayer=MediaPlayer.create(this, R.raw.music12);        Log.i("demo", "onCreate");    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        // TODO 自动生成的方法存根        Log.i("demo", "onStartCommand");        mplayer.start();        return super.onStartCommand(intent, flags, startId);    }    @Override    public void onDestroy() {        // TODO 自动生成的方法存根        Log.i("demo", "onDestroy");        mplayer.stop();        super.onDestroy();    }}

2.2 注册 Service

<service    android:name="com.demoservice.FirstService">    <intent-filter >        <action android:name="michael.FIRSTSERVICE"/>    </intent-filter></service>

2.3 开启/关闭 Service

package com.demoservice;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {    Button btn_start,btn_stop;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn_start=(Button)findViewById(R.id.btn_start);        btn_stop=(Button)findViewById(R.id.btn_stop);                final Intent intent=new Intent();        intent.setAction("michael.FIRSTSERVICE");                OnClickListener listener=new OnClickListener() {                        @Override            public void onClick(View v) {                // TODO 自动生成的方法存根                if(v == btn_start)                {                    startService(intent);                }else if(v==btn_stop)                {                    stopService(intent);                }            }        };            btn_start.setOnClickListener(listener);        btn_stop.setOnClickListener(listener);    }}


3 第二种 绑定方式 bindService

3.1 自定义 Service

package com.SecondService;import com.demoservice.R;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.IBinder;import android.util.Log;public class SecondService extends Service {    int count;    boolean quit=false;    MediaPlayer mplayer;    MyBinder binder=new MyBinder();    @Override    public IBinder onBind(Intent intent) {        // TODO 自动生成的方法存根        Log.i("demo", "onBind");        mplayer.start();                new Thread()        {            @Override            public void run() {                while(!quit)                {                    try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}                    count++;                    Log.i("demo", String.valueOf(count));                }            }        }.start();        return binder;    }    @Override    public boolean onUnbind(Intent intent) {        Log.i("demo", "onUnbind");        quit=true;        return super.onUnbind(intent);    }    @Override    public void onRebind(Intent intent) {        Log.i("demo", "onRebind");        mplayer.start();        super.onRebind(intent);    }    @Override    public void onCreate() {        super.onCreate();        quit=false;        mplayer=MediaPlayer.create(this, R.raw.music12);        Log.i("demo", "onCreate");    }    @Override    public void onDestroy() {        Log.i("demo", "onDestroy");        mplayer.stop();        quit=true;        super.onDestroy();    }        class MyBinder extends Binder    {        public SecondService getService()        {            return SecondService.this;        }        public int getCount()        {            return count;        }    }}

3.2 注册 Service

<service    android:name="com.SecondService.SecondService">    <intent-filter >        <action android:name="michael.SECONDSERVICE"/>    </intent-filter></service>

3.3 绑定/解绑Service

package com.SecondService;import com.demoservice.R;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {    SecondService mservice;    ServiceConnection conn=new ServiceConnection() {                @Override        public void onServiceDisconnected(ComponentName name) {            // TODO 自动生成的方法存根            Log.i("demo", "onServiceDisconnected");            mservice=null;        }                @Override        public void onServiceConnected(ComponentName name, IBinder service) {            // TODO 自动生成的方法存根            Log.i("demo", "onServiceConnecteds");            mservice = ((SecondService.MyBinder)service).getService();        }    };        Button btn_start,btn_stop,btn_get;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn_start=(Button)findViewById(R.id.btn_start);        btn_get=(Button)findViewById(R.id.btn_get);        btn_stop=(Button)findViewById(R.id.btn_stop);        final Intent intent=new Intent();        intent.setAction("michael.SECONDSERVICE");                OnClickListener listener=new OnClickListener() {                        @Override            public void onClick(View v) {                // TODO 自动生成的方法存根                if(v == btn_start)                {                    bindService(intent, conn, BIND_AUTO_CREATE);                }else if(v==btn_stop)                {                    unbindService(conn);                }else if(v==btn_get)                {                    btn_get.setText(String.valueOf(mservice.binder.getCount()));                }            }        };            btn_start.setOnClickListener(listener);        btn_stop.setOnClickListener(listener);        btn_get.setOnClickListener(listener);    }}


注:转载请注明出处 :) 毕竟代码是一个一个敲出来的啊,O(∩_∩)O~



更多相关文章

  1. Android Post方法请求URL 迭代器
  2. Android DEX方法超过64K和gradle编译OOM解决方案
  3. Android下按扭的使用方法
  4. API 23及之后版本关于用android studio 中LocationManager的方法
  5. Android:获取屏幕分辨率方法汇总
  6. android获取屏幕长宽的方法
  7. android 进程自杀再重启的方法
  8. Android监听HOME键的最简单的方法

随机推荐

  1. android:screenOrientation的说明
  2. Android(安卓)实现动画方式
  3. Android(安卓)Notebook
  4. android 滚动条
  5. 设置控件不可点击
  6. Android添加一个系统service
  7. Android工作笔记:Android路径大全
  8. Ubuntu android NDK 配置
  9. Android7.0中文文档(API)-- Toast
  10. My Android(安卓)Camera Notes