王学岗服务(一)

原创 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);
    }

}

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

王学岗Fragment(一)

手机屏幕的适配问题,需要建立领完一个layout文件夹,如图 当我们启动设备的分辨率为1280×800的时候,会启用第二个布局,如果不是,启动第一个布局。 但是这种适配有很大限制,一个Avti...

王学岗屏幕适配(一)

第一:屏幕适配,举个例子,我们把320×480屏幕中的一个按钮放到1080×800的屏幕中,这样会造成图片的 失真(图片变得模糊),还会出现转角变大,如图所示, 这个时候我们可以使用9.png拉伸...

王学岗c语言指针+指针地址

(一):c语言程序入口(main函数)//导入标准函数库(类似于Java导包) #include #include void main(){ //输出函数 printf("hell...

王学岗属性动画上(十一)——属性动画的综合应用

一,前言;嗨大家好,这次的动画内容是要把前几篇微博中用到的知识综合在一起,做出一个更有难度的效果。什么效果呢?先设置两个布局,一个隐藏,一个显示; 布局(类似于前几篇文章中的iv_zhangx...

王学岗ListView点击添加背景和头部脚部分割线

这个非常的简单,不做详细的解释了;布局只有一个ListView就不显示出来了 user_textview <LinearLayout xmlns:android="http://schemas.an...

王学岗高级控件滚动视图(一)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://s...

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

我们说一下我们的项目需求,当我们点击fragment中的条目的时候,activitu中的textView显示相应的文本。package com.example.fragment;import andr...

王学岗handler机制

handler+message机制有四种情况: 1)handler在主线程 使用主线程looper 和 消息队列 在子线程中发送message到消息队列 2)handler在主线程 使用主线程l...

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

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

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

(1)函数指针 先看段代码 采用传统的写法,直接调用函数#include "stdafx.h" #include "Windows.h" void showMessage(){ //弹窗 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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