安卓开发service

如果把Activity比喻为前台程序,那么service可以看做是一个后台程序。Service跟Activity一样也由Intent调用。

在工程里想要添加一个Service,先新建继承Service的类,然后到AndroidManifest.xml -> Application

中的Service标签中添加。

如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.service"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".MyService">
        <intent-filter>
                <action android:name="" />
        </intent-filter>
        </service>
    </application>

</manifest>

其中,第一个name是service的位置,包括完整的包名和service名,如果包名就是你定义的程序包名,也就是和gen目录下那个包的名字一样的话,直接".service名"就可以了。第二个name是你调用service时intent.setAction();中的参数,这个可以自己随便定义。

代码如下:

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnStartMyService"
                android:text="StartMyService">
        </Button>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnStopMyService"
                android:text="StopMyService">
        </Button>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnBindMyService"
                android:text="BindMyService">
        </Button>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnUnbindMyService"
                android:text="UnbindMyService">
        </Button>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnExit"
                android:text="退出程序">
        </Button>
</LinearLayout>

MyService.java:

package com.example.service;  

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

public class MyService extends Service {
        static public String ServiceState="";
        @Override
        public IBinder onBind(Intent arg0) {
                Log.e("Service", "onBind");
                ServiceState="onBind";
                return null;
        }
        @Override
        public boolean onUnbind(Intent intent){
                super.onUnbind(intent);
                Log.e("Service", "onUnbind");
                ServiceState="onUnbind";
                return false;  

        }
        @Override
        public void onCreate(){
                super.onCreate();
                Log.e("Service", "onCreate");
                ServiceState="onCreate";
        }
        @Override
        public void onDestroy(){
                super.onDestroy();
                Log.e("Service", "onDestroy");
                ServiceState="onDestroy";
        }
        @Override
        public void onStart(Intent intent,int startid){
                super.onStart(intent, startid);
                Log.e("Service", "onStart");
                ServiceState="onStart";
        }  

}  

MainActivity.java:

package com.example.service;  

import android.app.Activity;
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.util.Log;
import android.view.View;
import android.widget.Button;  

public class MainActivity extends Activity {
    Button btnStartMyService,btnStopMyService,btnBindMyService,btnUnbindMyService,btnExit;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnStartMyService=(Button)this.findViewById(R.id.btnStartMyService);
        btnStartMyService.setOnClickListener(new ClickEvent());  

        btnStopMyService=(Button)this.findViewById(R.id.btnStopMyService);
        btnStopMyService.setOnClickListener(new ClickEvent());  

        btnBindMyService=(Button)this.findViewById(R.id.btnBindMyService);
        btnBindMyService.setOnClickListener(new ClickEvent());  

        btnUnbindMyService=(Button)this.findViewById(R.id.btnUnbindMyService);
        btnUnbindMyService.setOnClickListener(new ClickEvent());   

        btnExit=(Button)this.findViewById(R.id.btnExit);
        btnExit.setOnClickListener(new ClickEvent());
    }
    @Override
    public void onDestroy()
    {
            super.onDestroy();
            Log.e("Activity","onDestroy");
    }  

    private ServiceConnection _connection = new ServiceConnection() {
                @Override
                public void onServiceConnected(ComponentName arg0, IBinder arg1) {
                        // TODO Auto-generated method stub
                }  

                @Override
                public void onServiceDisconnected(ComponentName name) {
                        // TODO Auto-generated method stub
                }
    };
    class ClickEvent implements View.OnClickListener{  

                @Override
                public void onClick(View v) {
                        Intent intent=new Intent(MainActivity.this,MyService.class);
                        if(v==btnStartMyService){
                                MainActivity.this.startService(intent);
                        }
                        else if(v==btnStopMyService){
                                MainActivity.this.stopService(intent);
                        }
                        else if(v==btnBindMyService){
                                MainActivity.this.bindService(intent, _connection, Service.BIND_AUTO_CREATE);
                        }
                        else if(v==btnUnbindMyService){
                                if(MyService.ServiceState=="onBind")//Service绑定了之后才能解绑
                                        MainActivity.this.unbindService(_connection);
                        }
                        else if(v==btnExit)
                        {
                                MainActivity.this.finish();
                        }  

                }  

    }
}  
时间: 2024-08-30 04:47:59

安卓开发service的相关文章

安卓开发 service 简介

Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy 我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的. 1 通过startService Service会经历 onCreate --> onStart stopService的时候直接onDestroy 如果是 调用者 直接退出而没有调用stopService的话,Service会一直在后台运行. 下次调用者再起来仍然可以stopService. 2

安卓开发里面可能遇到的空指针异常

记录一下安卓开发中遇到的空指针异常: 第一个是:可能未在AndroidManifest.xml 里面定义Activity或者Service,或者路径写错了: 第二个是:当用到Bundle的时候,可能没有和指定的Intent 进行绑定,而在另一个Activity里面却接收数据,就会引发空指针异常了! 第三个是:当在Activity里面使用setContentView的时候,同时又定义了一些其他布局中的按钮,在使用的时候,可能会引发空指针异常! 安卓开发里面可能遇到的空指针异常,布布扣,bubuko

Android安卓开发知识库汇总

初级 Android 面试知识库 Android 面试题总结之Android 进阶(二) - fuchenxuan blog - 博客频道 - CSDN.NET 如何成为一名优秀的程序员 | Mystra 2016Android某公司面试题 | yuweiguo's blog 我面试到底问什么? - AndroidDeveloper - 知乎专栏 扫清Android面试障碍 [Android基础]Android总结篇 - 陶程的博客 - 博客频道 - CSDN.NET AndroidStudyD

安卓开发工具汇总,开发人员必备利器

安卓开发工具汇总,开发人员必备!安卓开发过程中需要用到各种工具,作为一名安卓开发人员,有木有感到亚历山大,那么多工具!今天给大家汇总了一下安卓开发工具,安卓开发人员必备利器! 1.Draw 9-Patch 这个九宫格绘画安卓开发工具(draw9patch.bat)可以让你很容易的通过一个所见即所得(WYS|WYG)的编辑器来创建一个九宫格NinePatch图. 2.ProGuard ProGuard 是一个免费的 Java类文件的压缩,优化,混肴器.它删除没有用的类,字段,方法与属性.使字节码最

【Android】Eclipse下搭建安卓开发环境

本文撰写于2015/3/13. 主页:http://www.cnblogs.com/game-testing/ Eclipse下搭建安卓开发环境 写在前边的话: 安卓开发环境多种多样,没有什么优劣可言,习惯的就是最好的. 本文采用Eclipse+ADT+SDK的方式搭建安卓开发环境,同时也方便用于robotium自动化测试. 一.    安装JDK Eclipse启动时需要 JRE.虽然Eclipse自带JDK,但为了避免以后开发和测试过程中出现不必要的麻烦,这里讲述JDK的安装. JDK下载:

安卓开发入门与面试题01(潭州安卓开发入门教程)

今天老师讲到安卓的就业市场,说的我都想去面试了,想看看市面上咱们到底可以拿到什么样的工资,做什么样的行业.说来惭愧,我还只是一个安卓开发的新手,今天就和大家一样,开始我的安卓开发梦想启航.这个是潭州安卓开发入门教程里面最基础的. 从来以为学习安卓的都是为了兴趣,原来还可以为了就业,可是好难,就像咱们Android开发入门视频教程QQ群:175229978里面很多人一样,连面试题是哪一些都不懂,不过今天我分享到群里了,也希望在这里可以帮助更多安卓开发入门的小伙伴们. 1.什么是Activity?

安卓开发开发规范手册V1.0

安卓开发开发规范手册V1.0 之前发布过一份Web安全开发规范手册V1.0,看到收藏文章的读者挺多,发现整理这些文档还挺有意义. 最近周末抽了些时间把之前收集关于安卓安全开发的资料也整理了一下,整理出一份安卓安全开发手册,大部分内容都是在一些博客看到各位师傅的分享. 一.manifest文件安全 1.1 禁止PermissionGroup的属性为空 PermissionGroup可以对permission进行一个逻辑上的分组.如果PermissionGroup的属性为空,会导致权限定义无效,且其

Eclipse+ADT+Android SDK 搭建安卓开发环境

要求 必备知识 windows 7 基本操作. 运行环境 windows 7 下载地址 环境下载 最近开接触Android(安卓)嵌入式开发,首要问题是搭建Andoid开发环境,由于本人用的是windows7的笔记本,也就只能到Windows中搭建Android 开发环境了! 就搭建环境都花了比较长的时间, 在各种版本之间折腾了比较久的时间, 装好后SDK包更新又是一个比较大的麻烦(天朝的网络大家懂的--).下面把我的安装过程和经验分享个大家!! 安装JDK 这里可以参考我之前写的一篇关于安装J

安卓开发-设置RadioButton的点击效果

在安卓开发中用到底部菜单栏 需要用到RadioButton这个组件 实际应用的过程中,需要对按钮进行点击,为了让用户知道是否点击可这个按钮,可以设置点击后 ,该按钮的颜色或者背景发生变化. layout中这部分的代码为: 1 <RadioButton 2 android:id="@+id/radio_button0" 3 android:layout_height="fill_parent" 4 android:layout_marginTop="2