`
he91_com
  • 浏览: 400996 次
文章分类
社区版块
存档分类
最新评论

Android 四大组件之 Service

 
阅读更多

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~



分享到:
评论

相关推荐

    android四大组件之Service

    ### Android四大组件之Service #### 一、Service概述与特性 Service是Android系统中的四大核心组件之一,与Activity、BroadcastReceiver以及ContentProvider并列。它主要用于执行长时间运行的任务或者后台操作,...

    Android 四大组件之Service的Demo

    本篇文章将深入探讨四大组件之一的Service,并通过一个名为"servicesdemo"的示例项目来阐述其核心概念和使用方法。 Service是Android系统中的一个关键组件,它在后台运行,无需用户界面,可以执行长时间的任务,...

    Android四大组件之Service

    Android四大组件之ServiceService的生命周期被启动(startService)的服务的生命周期:被绑定(bindService)的服务的生命周期:被启动又被绑定的服务的生命周期:实例布局创建Service类启动ServiceDemo下载 android开发...

    Android四大组件简述

    在"Android四大组件简述"这个项目中,你可以找到关于这些组件的示例代码和实践应用,通过学习和调试这些示例,可以更深入地理解四大组件的工作原理和使用方式。这将对提升你的Android开发技能大有裨益。

    Android开发四大组件之Service应用总结Demo

    service的启动,停止,绑定,取消绑定,以及IntentService的生命周期走向测试和IntentService与访问者信息通信过程,不清楚之处请参阅我的博客《Android开发四大组件之Service总结》

    android四大组件详解

    在Android系统中,四大组件是构建应用程序的核心元素,它们分别是Activity、Service、BroadcastReceiver和Content Provider。这四个组件各自承担着不同的职责,共同构成了Android应用的骨架。 **Activity**是用户与...

    android 四大组件详细介绍

    Activity 是 Android四大组件中最复杂的,需要处理界面逻辑、事件响应、生命周期管理等多个方面。一个 Activity 占据当前的窗口,响应所有窗口事件,具备有控件、菜单等界面元素。 Service Service 服务是 Android...

    android基础知识05:四大组件之service 01实例程序2

    这个实例程序源自博客文章《android基础知识05:四大组件之service 01实例程序2》,它为开发者提供了关于如何在Android应用中实现和使用Service的实践指导。 首先,Service是Android中的后台运行组件,它可以长时间...

    android基础知识05:四大组件之service 01实例程序

    今天我们将聚焦于"四大组件"之一的Service,详细探讨它在Android开发中的作用以及如何创建一个简单的Service实例。 Service组件是Android应用程序中运行在后台的无用户界面组件,用于执行长时间运行的操作或在后台...

    Android四大组件之Service详解

    Service是Android应用程序开发中的核心组件之一,它是四大组件(Activity、Service、BroadcastReceiver、ContentProvider)中的成员,专门设计用于在后台执行长时间运行的任务,不与用户界面直接交互。Service通常...

    Android四大组件之Service(服务)实例详解

    Service是Android系统中的四大组件之一,它是用于在后台执行长时间运行任务而没有用户界面的组件。Service生命周期由系统管理,可以被其他组件如Activity启动或绑定。以下是对Service的详细说明: 1. **Service的...

    Android开发的四大组件

    在Android应用开发中,四大组件是构建应用程序的基础,它们分别是Activity、Service、BroadcastReceiver和ContentProvider,还有Intent作为组件间通信的重要桥梁。下面我们将逐一详细解释这些组件。 **Activity详解...

    android service 四大组件 完整代码

    在Android开发中,四大组件是应用程序的核心组成部分,它们分别是Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。本篇文章将深入探讨Service组件及其与四大...

    四,android四大组件基础介绍及打电话,发短信简单应用 &单元测试

    在Android开发中,四大组件是构建应用程序的核心元素,它们分别是:Activity、Service、BroadcastReceiver以及ContentProvider。这四个组件各自承担着不同的职责,是Android系统交互的基础。 1. **Activity**: ...

    android 四大组件图解 ppt形式展示

    在Android应用开发中,四大组件是其核心构造块,它们分别是Activity、Service、BroadcastReceiver以及ContentProvider。这个名为“Android 四大组件图解”的PPT文档为初学者提供了一个全面且直观的理解这些组件的...

    android基础知识05:四大组件之service 02:远程调用实例程序

    在"android基础知识05:四大组件之service 02:远程调用实例程序"中,我们探讨的是如何在不同的应用之间通过AIDL(Android Interface Definition Language)进行远程服务调用。AIDL是Android提供的一种机制,用于在...

    Android四大组件介绍

    总之,Android 四大组件共同构成了应用程序的功能框架,它们各自负责不同的职责,协同工作以实现丰富的功能和良好的用户体验。熟练掌握这些组件的使用和交互是开发高质量 Android 应用的基础。在实际开发中,开发者...

Global site tag (gtag.js) - Google Analytics