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(安卓)DEX方法超过64K和gradle编译OOM解决方案
  2. Android中Java反射技术的使用示例
  3. Unity3D Vuforia Android(安卓)拨打电话
  4. Android之Loader理解
  5. Android运行虚拟机报错Execution failed for task ':app:transfo
  6. Android(安卓)Post方法请求URL 迭代器
  7. android登录简单窗口
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. android sdk配置
  2. 在android中使用SOAP与webservice进行数
  3. 在Android中查看和管理sqlite数据库
  4. Android俄罗斯方块游戏源码
  5. 将LMbench移植到Android上
  6. Android输入系统与Qwerty物理键盘的支持
  7. RadioButton 选择框的位置
  8. Android(安卓)之Service的使用及生命周期
  9. android Intent机制详解
  10. 系出名门Android(1) - 在 Windows 下搭建