Android游戏开发之交互式通信

在Android平台下,应用程序可以方便地调用其他应用程序的功能来实现自己的功能需求,这是Android的特性之一,本文将向读者介绍Android程序内部或程序之间进行交互式通信的方式。

1.Android应用程序的基本组件

Android应用程序的基本组件包括Activity、Service、BroadcastReceiver和ContentProvider等,不同组件具有不同的特性以及各自的声明周期,下面就来对每个组件做一个简单的介绍。

(1)Activity组件

Activity是最常见的一种Android组件,每个Activity都相当于一个屏幕,其为用户提供了进行交互的可视界面。应用程序可以根据需要包含一个活多个Activity,,这些Activity一般都继承自android.app包下的Activity类,并且这些Activity之间的运行是相互独立的。Activity的生命周期主要包含3个阶段。

1)运行态(running state)

此时Activity显示在屏幕前台,并且具有焦点,可以和用户的操作进行交互。

2)暂停态(paused state)

此时Activity失去焦点,并被其它的运行态Activity取代在屏幕前台显示,暂停态的Activity仍然保留其状态和成员等其它信息,当系统的内存非常匮乏时,暂停态的Activity会被结束掉以获得更多的资源。

3)停止态(stopped state)

停止态的Activity不仅没有焦点,而且是完全不可见的,虽然其也保留状态和成员等信息,停止态的Activity会在系统需要的时候被结束。

当Activity在不同的状态之间切换时,可以通过重写相应的回调方法来编写状态改变时应该执行的动作。

(2)Service组件

Service没有提供与用户进行交互的表示层。Service是运行在后台的一种Android组件,当应用程序需要进行某种不需要前台显示的计算或数据处理时,就可以启动一个Service来完成,每个Service都继承自android.app包下的Service类。

Service一般由Activity或其他Context对象来启动,当启动Service之后,该Service将会在后台运行,即使启动这个Service得Activity或其他组件的生命周期已经结束,Service仍然会继续运行,直到自己的生命周期结束为止。每个Service都应该在AndroidMainfest.xml中进行声明。Service的启动方式有两种,对应的生命周期也各不相同。

(1)通过startService方法启动。当系统调用startService方法时,如果该Service还未启动,则依次调用其onCreate方法和onStart方法来启动。当其他Context对象调用stopService方法、Service调用自称的stopSelf或stopService方法时才会停止Service的执行。

(2)通过bindService方法启动。当系统调用bindService方法时,如果该Service未启动,则会调用其onCreate方法完成初始化工作,然后会将该Service和Context对象(如Activity)进行绑定,当被绑定的Context对象被销毁时,与之绑在一起的Service也会停止运行。

需要注意的是,尽管存在两种方式启动Service,但是无论Service是通过什么方式启动的,都可以将其与Context对象进行绑定。

(3)Broadcast Receiver组件

Broadcast Receiver也不提供与用户交互的表示层,其是一种负责接收广播消息并对消息作出反应的组件。在Android的系统中就存在许多这样的广播,比如电池电量过低或信号过低时,系统就会发出广播进行通知。

应用程序如果需要响应某个广播消息,应该注册对应的BroadcastReceiver对象,该对象继承自BroadcastReceiver类,该类位于Android.content包下。

1)BroadcastReceiver发布广播的方式

发布一个广播比较容易,在需要的地方创建一个Intent对象,将信息的内容和用于过滤的信息封装起来,通过调用Context.sendBroadcast方法、Context.sendOrderedBroadcast方法或者Context.sendStickyBroadcast方法将该Intent对象广播出去,淡出发布广播方式的区别如下。

通常,使用sendBroadcast或sendStickyBroadcast发送出去的Intent,所有满足条件的BroadcastReceiver都会执行其onReceive方法。但若有多个满足条件的BroadcastReceiver,其执行onReceive方法的顺序是没有保证的。而通过sendOederedBroadcast方法发送出去的Intent,会根据BroadcastReceiver注册时IntentFilter设置的优先级的顺序来执行onReceive方法,相同优先级的BroadcastReceiver执行onReceiver方法的顺序是没有保证的。

在人生的大海中,我们虽然不能把握风的大小,却可以调整帆的方向。

Android游戏开发之交互式通信

相关文章:

你感兴趣的文章:

标签云: