安卓4大组件之一服务Service

Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色。它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务。必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态。(比如听音乐,退出程序英语需要继续播放。数据定期更新都需要服务来实现)

基本用法:
服务是4大组件之一必须在清单文件中注册:

<service android:name="com.example.myservice.Myservice"></service>

新建一个MyService继承自Service,并重写父类的onCreate()、onStartCommand()和onDestroy()方法,如下所示:

public class Myservice extends Service { 
class MusicController extends Binder {
        public void Abb(){
            Log.e("e", "连接了绑定服务");
        }
    }  
//绑定服务

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        Log.e("e", "onBind");
        return null;
    }
    //关闭绑定服务
    @Override
    public boolean onUnbind(Intent intent) {
        // TODO Auto-generated method stub
        Log.e("e", "onUnbind");
        return super.onUnbind(intent);
    }
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        Log.e("e", "onCreate");
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.e("e", "onDestroy");
    }
    //普通服务的(绑定服务不走着个方法)
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Log.e("e", "onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }
}

MainActivity当中开启服务:

public class MainActivity extends ActionBarActivity implements OnClickListener {

    private MyServiceConnextion connextion;
    Boolean isBind=false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt=(Button) findViewById(R.id.bt);
        Button bt2=(Button) findViewById(R.id.bt2);
        connextion = new MyServiceConnextion();
        bt.setOnClickListener(this);
        bt2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bt:
            //启动普通服务
            /*startService(new Intent(MainActivity.this,Myservice.class));*/
            //启动绑定服务
            if (!isBind) {
                isBind=true;
                bindService(new Intent(MainActivity.this,Myservice.class), connextion,BIND_AUTO_CREATE);
            }

            break;
        case R.id.bt2:
            //关闭普通服务
            /*stopService(new Intent(MainActivity.this,Myservice.class));*/
            //关闭绑定服务
            if (isBind) {
                isBind=false;
                unbindService(connextion);
            }

            break;

        default:
            break;
        }
    }
    //绑定服务
    public class MyServiceConnextion implements ServiceConnection{

        @Override
        public void onServiceConnected(ComponentName arg0, IBinder arg1) {
            // TODO 自动生成的方法存根
            Myservice.MusicController m = (Myservice.MusicController)arg1;
            m.Abb();
            Log.e("e", "我连接了");
        }
        /*ServiceConnection 的回调方法onServiceDisconnected() 在连接正常关闭的情况下是不会被调用的, 
        该方法只在Service 被破坏了或者被杀死的时候调用.例如, 系统资源不足, 要关闭一些Services, 
        刚好连接绑定的 Service 是被关闭者之一,  这个时候onServiceDisconnected() 就会被调用。*/

        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            // TODO 自动生成的方法存根
            Log.e("e", "我断开了");
        }

    }
}

参考网址:http://blog.csdn.net/guolin_blog/article/details/11952435

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值