.Net程序员玩转Android开发---(18)Android服务

在做.NET开发的时候,我们经常会写windows service服务,在后台运行。在android系统中,同样可以写android服务. Service是安卓四大组件一个非常重要的组件,

四大组件包括Activity, Service ,BroadCastReceive,Content Provicer, 前几节课中,我们一直讲解activity,这节我们看下怎样使用Service, 我们在一些后台操作的时候,会使用service,比如在后台不断获取当前地理位置信息。 并且service服务还可以与activity进行通信。

Android中所有的服务都继承自Service,并且重载三个重要的方法

onCreate:服务在第一次调用的时候执行,第二次如果服务没有终止,再次调用的时候不会执行该方法

onStart:服务启动后,在该方法里面可以监听外部传入的一些信息

onDestroy:服务终止时调用。

我们看下面的例子

1.创建服务

首先创建serviceone服务,继承Service,

package com.example.helloword;

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

public class serviceone extends Service {

	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	public serviceone()
	{

	}

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		 Toast.makeText(this, "onCreate创建服务", Toast.LENGTH_SHORT).show();
		 Log.i("service", "onDestroy");
	     	super.onCreate();
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		Toast.makeText(this, "服务停止", Toast.LENGTH_SHORT);
		super.onDestroy();
	}

	@Override
	@Deprecated
	public void onStart(Intent intent, int startId) {
		// TODO Auto-generated method stub
		Log.v("onstart", "接受消息");
		Toast.makeText(this, "onStart接受消息", Toast.LENGTH_SHORT).show();
		if (intent != null)
		{
			Bundle bundle = intent.getExtras();  

			String para = bundle.getString("para");  

			Toast.makeText(this, "接受参数"+para, Toast.LENGTH_SHORT).show();

		}
		super.onStart(intent, startId);
	}

}

服务创建完成后,要在AndroidManifest.xml添加服务

 <service   android:name=".serviceone">
   <intent-filter>
        <action android:name="com.example.helloword.serviceone" />
        <category android:name="android.intent.category.default" />
   </intent-filter>
</service>  

2.服务和Activity通信

上面的服务创建完成后,我们现在创建一个activity向服务发送信息,服务在onstart进行接收处理,首先创建布局文件

serviceactivity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btnstartservice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动服务" />

    <Button
        android:id="@+id/btnstopservice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止服务" />

</LinearLayout>

创建ServiceActivity,在启动服务的时候发送para参数

package com.example.helloword;

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 ServiceActivity extends Activity {

	private Button btnstart;//启动服务

	private Button btnstop;//停止服务

	Intent intent;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.serviceactivity);
		btnstart=(Button)findViewById(R.id.btnstartservice);
		btnstop=(Button)findViewById(R.id.btnstopservice);

		btnstart.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				 intent = new Intent("com.example.helloword.serviceone");
				Bundle bundle = new Bundle();
				 bundle.putString("para","Hello World");
				  intent.putExtras(bundle);
			     startService(intent);
			}

		});

		btnstop.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				stopService(intent);
			}

		});

	}
}





时间: 2024-10-20 07:27:18

.Net程序员玩转Android开发---(18)Android服务的相关文章

CSharp程序员学Android开发---3.Android内部元素不填充BUG

最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历时一个多月,4个人开发,最终行成一个可用的Demo,整体效果还非常不错.这其中借鉴了网上的“仿网易客户端的Demo”还有就是学习<疯狂Android>,收获颇多,这里利用几篇文章做一个项目经验总结,还有就是更多的从C# 程序员的观点来理解Android的一些异同之处. 文章目录: CSharp程序

[Linux] PHP程序员玩转Linux系列-使用supervisor实现守护进程

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 7.PHP程序员玩转Linux系列-nginx初学者引导 8.PHP程序员玩转Linux系列-Nginx中的HTTPS 首先遇到的问题

【运维者说】程序员玩跨界,错在运维人员

在很多交流场合,我们或多或少能听到有小伙伴抱怨运维岗位工作没有得到老板或者公司同事的认可,这怪谁呢?私以为只能怪运维岗位的各位同行,为什么这么讲呢?我这个攒了很久的大招,今天终于可以释放出来了. 恰逢看到田逸老师写的博客<程序员,请不要抢系统管理员的饭碗>以及文章下面各位同仁的评论内容,很多小伙伴基本上是从一个系统管理员的角度出发说出了安全问题的原因是程序员不应该这么做而这么做了,那程序员应该怎么做,他们知道吗?从这篇博客中描述的安全问题出发,田逸老师作为系统管理人员排查问题的思路非常清晰,对

[Linux] PHP程序员玩转Linux系列-升级PHP到PHP7

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 7.PHP程序员玩转Linux系列-nginx初学者引导 8.PHP程序员玩转Linux系列-Nginx中的HTTPS 9.PHP程序

程序员最喜爱的12个Android应用开发框架二(转)

在上一篇程序员最喜爱的12个Android应用开发框架(一)中,我们为大家介绍了前6个Android应用开发框架,主要包括了 Xamarin.Phonegap.Corona SDK等.接下来,小编将继续为大家介绍余下的6个开发框架,欢迎大家品鉴! 7) JQuery Mobile jQuery Mobile是jQuery在手机上和平板设备上的版本.jQuery Mobile不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架来支持全球主流的移动平台. 今天

[Linux] PHP程序员玩转Linux系列-翻译nginx官网安装nginx

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 如何以最简单的方式安装nginx,我在查找了N多方法只后,发现还是nginx官网的方法最简单啊.在此我也来搬运一下官网的安装方式 在CentOS中安装nginx 当然是以包的安装方式最简单,nginx官网也提供了

如何让程序员更容易的开发Web界面?重构SmartAdmin展示TinyUI

如何让程序员更容易的开发Web界面,是一个持久的话题,所有的从事相关开发的公司都会碰到这个问题,并且被这个问题所深深困扰. Tiny框架也不得不直视这个问题,确实来说,想解决这个问题,也是非常有难度与深度的,业界也有各种各样的尝试,这也是有各种各样不同框架出现的原因. Tiny框架构建者认为,完全采用一种框架解决所有问题,是不现实的.而且即使目前找得到一种非常好的框架,暂时可以满足应用需要,但是随着技术的发展,业务的进化,就会慢慢变得不再满足业务需要.因此,Tiny框架构建从不再把做一套UI组件

[Linux] PHP程序员玩转Linux系列-nginx初学者引导

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 翻译自官网文档 nginx有一个master进程和很多个worker进程.master进程的主要目的是读取和执行配置文件,维持work

[Linux] PHP程序员玩转Linux系列-备份还原MySQL

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 前几天有个新闻,说是gitlab的工程师把数据文件给误删了,搞了个大事件,很多人都去围观了.备份工作应该在最开始的时候就要做,否则就会失去最佳时机,为了保证我的数据是安全的,因此我要搞备份了.备份分为逻辑备份和物理备份,逻辑备份是导sql,物理备份是基于文件的,这两种我都搞一下. 开启binlog 首先第一件事是打开bi