王学岗服务(一)

什么Service 服务(Activity ContentProvider BroadCastRecerver Service)
服务是android四大组件(公司部门(客户看得见 客户看不见))
Activity—-需要与客户直接打交道的部门
Service—-在后台默默的付出
三,什么时候需要Service?
需要常驻的后台工作.就需要使用服务。
(音乐播放app 下载 不断定位传输数据 微信的消息通讯 )
三,怎么样使用服务?
1,必须在清单文件中注册
2,启动服务有两种方式:Context .startService() Context.bindService()
3 ,service是运行在主线程中。如要需要做一些耗时操作,那么必须开子线程。
四,服务的生命周期:
1,多次启动服务,onCreate方法只会调用1次
2,当一个服务如果是非正常情况,退出。那么系统会自动启动它。
3 , 当服务停止了,并全部都解绑了,服务才会被销毁。
4,服务可以启动多次,当时只会绑定一次。
5,当activity退出的时候,必须解绑服务,如果你没有解绑服务,系统会自动帮你解绑服务

package com.example.sp_service;

import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.ActionBarActivity;
import android.view.View;

public class MainActivity extends ActionBarActivity {

    private MyServiceConnection msc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
         * SharedPreference原理
         * 1)Context类是抽象类,实现类是ContextImpl,SharedPreference是一个接口
         * ,实现类是SharedPreferenceImpl
         * 2)SharedPreference类是单例模式,所用的客户端共享一个SharedPreference
         * Content的抽象方法getSharedPreferences
         * ()方法,ContextImpl类重写了该方法,创建SharedPreferences对象并放入集合
         * 然后创建shared_prefres目录下xml文件,并序列化xml文件
         */
        getSharedPreferences("", 0);
        /*
         * 2,Service 1)服务是什么? 服务是Android四大组件(公司部门,有的客户看的见,有的客户看不见)
         * Activity:需要与可和直接打交道的部门 Service:在后台默默付出 2)为什么需要Service
         * 需要常驻后台的工作就需要服务,比如音乐播放,退出界面后音乐依然在播放;又比如下载;比如微信、QQ的消息通讯 3)怎么样使用服务?
         * 必须在清单文件中进行注册 使用Context的startService()和bindService()两种方式开启服务
         * Service运行在主线程中,如果需要做一些耗时操作,那么必须开子线程
         */
    }

    // 通过Context开始和结束服务是向服务发一个指令
    public void start(View v) {
        Intent intent = new Intent(this, MusicService.class);
        startService(intent);
    }

    public void stop(View v) {
        Intent intent = new Intent(this, MusicService.class);
        stopService(intent);
    }

    // 绑定服务是建立一个连接(联想,客户端与服务端通信也是建立一个连接);是耗时操作
    public void bind(View v) {

        Intent intent = new Intent(this, MusicService.class);
        msc = new MyServiceConnection();
        // 绑定的时候自动创建服务
        bindService(intent, msc, Service.BIND_AUTO_CREATE);

    }

    public void unbind(View v) {

        unbindService(msc);
    }

    // 建立 ServiceConnection类
    class MyServiceConnection implements ServiceConnection {
        // 建立连接
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {

        }

        // 断开连接
        @Override
        public void onServiceDisconnected(ComponentName name) {

        }

    }
    @Override
    protected void onDestroy() {
        // 1.如果服务绑定后没有解绑就退出会报错误,所以在退出Activity这里解绑服务,
        //又因为没有绑定服务就解绑也会报错,所以解绑之前先进性非空判断

        if(msc!=null){
            // 解绑连接
            unbindService(msc);
        }
        super.onDestroy();
    }
}
package com.example.sp_service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class MusicService extends Service {
/*服务的生命周期
 * 1,多次启动服务,onCreate方法只会运行一次,onStartCommand会调用很多次
    */
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        Log.i("gang", "onBind");
        return null;
    }

    @Override
    public void onCreate() {
        Log.i("gang", "onCreate");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Log.i("gang", "onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        Log.i("gang", "onDestroy");
        // TODO Auto-generated method stub
        super.onDestroy();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.i("gang", "onUnbind");
        // TODO Auto-generated method stub
        return super.onUnbind(intent);
    }

}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值