第四章 Android开发三大基石—Activity、Service和Handler(5)

2)和Activity交互的本地服务

刚刚我们介绍的Service是不需要与Activity进行交互的,现在我们再来看看与Activity交互的本地服务。首先,我们新建一个BindLocalServide类继承自Serivce,代码如下:


// import略

public class BindLocalServideextends Service {

private static final String TAG = "localservice";

private MyBinder myBinder = new MyBinder();

@Override

public IBinder onBind(Intent intent) {

return myBinder;

}

@Override

public void onCreate() {

super.onCreate();

}

@Override

public void onDestroy() {

super.onDestroy();

}

@Override

public void onStart(Intent intent, int startId) {

super.onStart(intent, startId);

}

@Override

public boolean onUnbind(Intent intent) {

return super.onUnbind(intent);

}

public class MyBinder extends Binder{

public LocalService getService(){

return LocalService.this;

}

}

}

然后,我们新建一个BindServiceActivity类继承自Actvity,代码如下:


// import略

public class BindServiceActivity extends Activity{

private Button startBtn,stopBtn;

private boolean flag;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.localservice);

startBtn = (Button)findViewById(R.id.start_button);

stopBtn = (Button)findViewById(R.id.stop_button);

startBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(BindServiceActivity.this,LocalService.class);

bindService(intent, conn, Context.BIND_AUTO_CREATE);

}

});

stopBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if(flag == true){

unbindService(conn);

flag = false;

}

}

});

}

private ServiceConnection conn = new ServiceConnection() {

@Override

public void onServiceDisconnected(ComponentName name) {

}

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

MyBinder binder = (MyBinder)service;

LocalService bindService = binder.getService();

bindService.MyMethod();

flag = true;

}

};

}

在这里,也是使用之前使用过的localservice.xml布局文件,定义了“启动”和“停止”两个按钮。另外,别忘了在AndroidMainfest.xml中注册Service:


<service android:name=". BindLocalServideextends "/>

--------------------------------------------

试着放个广告 现在没工作 要生存 没办法

平安陆金所 隶属于平安集团的p2p平台

年投资回报率7%-9% 是替代银行理财的首选

个人经验教训 推荐投资安鑫或者有担保的彩虹项目

不要投资安e 那个几乎无法转让 想提前提现非常困难

注册链接 http://affiliate.lufax.com/action/36XBU

用此链接注册 你我都会有几十元的额外现金奖励

--------------------------------------------

这里可以发现onBind需要返回一个IBinder对象。也就是说和上一例子LocalService不同的是:

1)添加了一个public内部类继承Binder,并添加getService方法来返回当前的Service对象;

2)新建一个IBinder对象——new那个Binder内部类;

3)onBind方法返还那个IBinder对象。

然后,我们来看看打印出来的效果,如图4-8所示:

图4-8 onBind Service执行顺序

通过日志,我们可以发现,通过bindService这种方法启动服务,当服务启动后,多次启动只有第一次有效,并且与服务相绑定的Activity“死亡”时,该服务也停止。

4.2.4开机自启动的服务

我们在使用某些Android应用的时候,可能会发现安装了某个应用之后,会有一些服务也会随之运行。而且,有的服务每次都会随着手机开机而自动启动。下面,就让我们一起来看看是怎么样实现开机自启动服务的。

首先,我们需要来了解一下Android中的 BroadcastReceiver:

BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。

在Android系统中,广播应用在方方面面。例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。

正是基于这样的原理,只要实现一个BroadcastReceiver,我们就可以监听开机时候的广播(手机启动完成的事件ACTION_BOOT_COMPLETED),当收到开机“信号”时,启动相应的服务。

我们用一个简单的例子来看看它是如何实现的。

首先,我们新建一个MyReceiver类继承自BroadcastReceiver,代码如下:


// import略

public class MyReceiver extends BroadcastReceiver {

private static final String POWERN_ON_ACTION = "android.intent.action.BOOT_COMPLETED";

public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(POWERN_ON_ACTION)) {

startService(new Intent("com.char4.LOCAL_SERVICE"));

}

}

}

我们要让这个Receiver工作,需要把它注册到Android系统上,去监听广播的BOOT_COMPLETED intent。在AndroidManifest.xml中添加如下代码:


<receiver android:name=".MyReceiver" >

<intent-filter>

<action android:name="android.intent.action.BOOT_COMPLETED"/>

</intent-filter>

</receiver>

这样重新开机以后,服务就会在系统启动完毕后自动运行了。

时间: 2024-10-06 06:53:46

第四章 Android开发三大基石—Activity、Service和Handler(5)的相关文章

第四章 Android开发三大基石—Activity、Service和Handler(1)

第四章 Android开发三大基石-Activity.Service和Handler 学习Android开发,首先就不得不学习Activity和Service这两个组件.Activity是有界面的程序,几乎承载着用户对应用程序的所有操作.而Service是没有界面的程序,它是所谓的服务,也叫后台程序.掌握好它们,是我们学习Android开发必不可少的环节.Handler是Android开发中最常用的消息机制,几乎所有应用程序都会使用Handler传递消息.可以说,想要学习Android应用开发,

第四章 Android开发三大基石—Activity、Service和Handler(2)

4.1.3Activity的创建 在 Android 中创建一个 Activity 是很简单的事情,编写一个继承自 android.app.Activity的类,并在 AndroidManifest.xml文件中声明即可.下面,我们来看一个例子,我们创建一个MyActivity类继承自Activity,代码如下: public class MyActivity extends Activity {     @Override     public void onCreate(Bundle sav

第四章 Android开发三大基石—Activity、Service和Handler(4)

4.2千变万化的服务-Service开发 Service是Android系统中运行在后台.不和用户交互应用组件.它和Activity的级别差不多,只能在后台运行.每个Service必须在manifest文件中 通过<service>来声明. 4.2.1 Service的生命周期 Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service的时候,先后调用onCreate().onSta

第四章 Android开发三大基石—Activity、Service和Handler(6)

4.3 Android线程间的通信-消息机制 在Android程序运行中,线程之间或者线程内部进行信息交互时经常会使用到消息,如果我们熟悉这些基础的东西及其内部原理,将会使我们的Android开发变的更加容易,从而更好地架构系统.下面,就让我们来看看Android中的消息机制到底是怎样一回事吧. 4.3.1消息的传递-Handler的使用 在Android中,线程之间进行信息交互时经常会使用消息,那么,"消息"是在什么时候使用呢?它的工作原理又是怎么样的呢? 在解释这些之前,我们先来看

第四章 Android开发三大基石—Activity、Service和Handler(3)

4.1.5Activity交互-Activity跳转 一般的,我们的应用程序都不会简单到只有一个界面,而是会有很多个界面,这个时候我们就会创建多个Activity,然后根据业务逻辑在多个Activity之间进行跳转. 我们可以用切换Layout的方式进行手机页面间的转换.但是如果要转换的页面并不单单只是背景.颜色或文字内容的不同,而是需要对整个Activity进行置换,并将主控权交给新的Activity,那就不是仅靠改变Layout就能完成了,我们需要在这些Activity中进行跳转及数据传递.

第四章 Android开发三大基石—Activity、Service和Handler(7)

4.3.2Android中消息机制的详细分析 下面,我们就来详细分析一下Android中的消息机制. 熟悉Windows编程的朋友知道Windows程序是消息驱动的,并且有全局的消息循环系统.Google参考了Windows的消息循环机制,也在Android系统中实现了消息循环机制.Android通过Looper.Handler来实现消息循环机制.Android的消息循环是针对线程的,每个线程都可以有自己的消息队列和消息循环. Android系统中的Looper负责管理线程的消息队列(Messa

Android学习笔记—第四章 Android开发组件2

第四章 Android开发组件2 列表类组件 (1)ListView组件:以垂直列表的形式列出需要显示的列表项 相关属性: a. android:divider  用于为列表视图设置分隔条,可以用颜色或者图片资源 b. android:dividerHeight  设置分隔条的高度 c. android:entries  通过数组资源为ListView指定列表项 d. android:footerDividersEnabled  设置是否在footerView之前绘制分隔条,默认为true. e

【Android的从零单排开发日记】之入门篇(四)——Android四大组件之Activity

在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页面类似.当然,这种相似性主要体现在设计思想上.在具体实现方面,Android的Activity组件有自己的设计规范,同时,它能够更简便地使用线程.文件数据等本地资源. 一.Activity 的生命周期 Activity 的生命周期是被以下的函数控制的. 1 public class Activity

2017-2018-2 20165331 实验四《Android开发基础》实验报告

实验四 <Android开发基础> 实验报告封面 课程:Java程序设计 班级:1653 姓名:胡麟 学号:20165331 成绩: 指导教师:娄嘉鹏 实验日期:2018.5.14 实验密级: 预习程度: 实验时间:15:35 - 17:50 仪器组次:31 必修/选修: 实验序号:4 实验名称:Android开发基础 实验目的与要求:①完成云班课中的检查点,也可以先完成实验报告,直接提交.注意不能只有截图,要有知识点,原理,遇到的问题和解决过程等说明.实验报告中一个检查点要有多张截图. ②发