王学岗服务(一)

原创 2016年08月29日 00:22:53

什么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);
    }

}

这里写图片描述

一线互联网公司机器学习岗位面试经验

从9月18号开始投实习简历到10月21号,差不多一个月的时间,面了三个互联网公司,有研发岗和算法岗,有的拿到了internship, 也有的被惨虐;会有面试通过的惊喜,也有一轮游的不甘;对结果的无法...
  • u010111016
  • u010111016
  • 2016年10月21日 19:26
  • 4939

国内互联网公司算法&机器学习岗(阿里星)面试总结

原文地址:http://blog.csdn.net/lihouyi2010/article/details/50179191 从2015年8月到2015年10月,花了3个月时间找工作...
  • zr459927180
  • zr459927180
  • 2016年07月21日 15:26
  • 8590

ffmpeg打开视频文件步骤

目的:解码h264文件,转存avi格式或者yuv格式,方便opencv处理。 方法:使用ffmpeg库来解码文件,转存 1、理论探究 FFmpeg主要由一下几个部分组成: li...
  • t1234xy4
  • t1234xy4
  • 2016年05月28日 14:32
  • 2283

王学岗app设计框架:mvc框架

本文目的:对app设计架构有一个初步的了解; **为什么需要架构设计(代码在10万行以上) 1,使我们的程序模块化(分工协同开发的需要),模块内部的高内聚和模块之间的低耦合; 2,提高开发...
  • qczg_wxg
  • qczg_wxg
  • 2016年09月16日 15:39
  • 213

王学岗RxJava(十六)——merge,zip,join等组合方法

组合就是多输入,单输出,大家看具体的例子package com.example.acer.rxjavatest;import android.os.Bundle; import android.sup...
  • qczg_wxg
  • qczg_wxg
  • 2016年11月14日 17:36
  • 1340

王学岗自定义AsycTask

布局文件我就不写了,就是几个控件package com.tz.kateasyctask_tz;import java.io.FileOutputStream; import java.io.IOExc...
  • qczg_wxg
  • qczg_wxg
  • 2016年10月08日 20:32
  • 179

王学岗Fragment(二)

先介绍下我们本项目的效果,在点击左侧的菜单的时候,右侧要出现响应的画面。 我们在继承Fragment去填充的时候,也可以继承ListFragment。ListFragment就是Fragment+L...
  • qczg_wxg
  • qczg_wxg
  • 2016年01月27日 16:30
  • 196

王学岗Fragment(六)——Activity与fragment之间数据的传递

我们说一下我们的项目需求,当我们点击fragment中的条目的时候,activitu中的textView显示相应的文本。package com.example.fragment;import andr...
  • qczg_wxg
  • qczg_wxg
  • 2016年01月31日 22:14
  • 205

王学岗handler机制

handler+message机制有四种情况: 1)handler在主线程 使用主线程looper 和 消息队列 在子线程中发送message到消息队列 2)handler在主线程 使用主线程l...
  • qczg_wxg
  • qczg_wxg
  • 2016年10月07日 22:06
  • 139

王学岗函数指针+动态内存分配

(1)函数指针 先看段代码 采用传统的写法,直接调用函数#include "stdafx.h" #include "Windows.h" void showMessage(){ //弹窗 ...
  • qczg_wxg
  • qczg_wxg
  • 2017年03月10日 14:44
  • 217
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:王学岗服务(一)
举报原因:
原因补充:

(最多只允许输入30个字)