当前位置:文档之家› Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务

Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务

Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务
Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务

Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务

Service简介

Service是Android中实现程序后台运行的解决方案,它非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务。Service默认并不会运行在子线程中,它也不运行在一个独立的进程中,它同样执行在UI线程中,因此,不要在Service中执行耗时的操作,除非你在Service中创建了子线程来完成耗时操作

Service的运行不依赖于任何用户界面,即使程序被切换到后台或者用户打开另一个应用程序,Service仍然能够保持正常运行,这也正是Service的使用场景。当某个应用程序进程被杀掉时,所有依赖于该进程的Service也会停止运行

后台服务

后台服务可交互性主要是体现在不同的启动服务方式,startService()和bindService()。bindService()可以返回一个代理对象,可调用Service中的方法和获取返回结果等操作,而startService()不行

不可交互的后台服务

不可交互的后台服务即是普通的Service,Service的生命周期很简单,分别为onCreate、onStartCommand、onDestroy这三个。当我们startService()的时候,首次创建Service会回调onCreate()方法,然后回调onStartCommand()方法,再次startService()的时候,就只会执行一次onStartCommand()。服务一旦开启后,我们就需要通过stopService()方法或者stopSelf()方法,就能把服务关闭,这时就会回调onDestroy()

一、创建服务类

创建一个服务非常简单,只要继承Service,并实现onBind()方法

public class BackGroupService extends Service {

/**

* 綁定服务时调用

*

* @param intent

* @return

*/

@Nullable

@Override

public IBinder onBind(Intent intent) {

Log.e("Service", "onBind");

return null;

}

/**

* 服务创建时调用

*/

@Override

public void onCreate() {

Log.e("Service", "onCreate");

super.onCreate();

}

/**

* 执行startService时调用

*

* @param intent

* @param flags

* @param startId

* @return

*/

@Override

public int onStartCommand(Intent intent, int flags, int startId) { Log.e("Service", "onStartCommand");

//这里执行耗时操作

new Thread() {

@Override

public void run() {

while (true){

try {

Log.e("Service", "doSomething");

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}.start();

return super.onStartCommand(intent, flags, startId);

}

/**

* 服务被销毁时调用

*/

@Override

public void onDestroy() {

Log.e("Service", "onDestroy");

super.onDestroy();

}

}

二、配置服务

Service也是四大组件之一,所以必须在manifests中配置

三、启动服务和停止服务

我们通过两个按钮分别演示启动服务和停止服务,通过startService()开启服务,通过stopService()停止服务

public class MainActivity extends AppCompatActivity {

Button bt_open, bt_close;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/908285530.html,yout.activity_main);

bt_open = (Button) findViewById(R.id.open);

bt_close = (Button) findViewById(R.id.close);

final Intent intent = new Intent(this, BackGroupService.class);

bt_open.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//启动服务

startService(intent);

}

});

bt_close.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//停止服务

stopService(intent);

}

});

}

}

当你开启服务后,还有一种方法可以关闭服务,在设置中,通过应用->找到自己应用->停止

四、运行代码

运行程序后,我们点击开始服务,然后一段时间后关闭服务。我们以Log信息来验证普通Service的生命周期:onCreate->onStartCommand->onDestroy

11-24 00:19:51.483 16407-16407/com.handsome.boke2 E/Service: onCreate

11-24 00:19:51.483 16407-16407/com.handsome.boke2 E/Service: onStartCommand

11-24 00:19:51.485 16407-16613/com.handsome.boke2 E/Service: doSomething

11-24 00:19:53.490 16407-16613/com.handsome.boke2 E/Service: doSomething

11-24 00:19:55.491 16407-16613/com.handsome.boke2 E/Service: doSomething

11-24 00:19:57.491 16407-16613/com.handsome.boke2 E/Service: doSomething

11-24 00:19:58.056 16407-16407/com.handsome.boke2 E/Service: onDestroy

11-24 00:19:59.492 16407-16613/com.handsome.boke2 E/Service: doSomething

11-24 00:20:01.494 16407-16613/com.handsome.boke2 E/Service: doSomething

11-24 00:20:03.495 16407-16613/com.handsome.boke2 E/Service: doSomething

其中你会发现我们的子线程进行的耗时操作是一直存在的,而我们Service已经被关闭了,

关闭该子线程的方法需要直接通过Home键关闭该应用程序

可交互的后台服务

可交互的后台服务是指前台页面可以调用后台服务的方法,可交互的后台服务实现步骤是和不可交互的后台服务实现步骤是一样的,区别在于启动的方式和获得Service的代理对象

一、创建服务类

和普通Service不同在于这里返回一个代理对象,返回给前台进行获取,即前台可以获取该代理对象执行后台服务的方法

public class BackGroupService extends Service {

/**

* 綁定服务时调用

*

* @param intent

* @return

*/

@Nullable

@Override

public IBinder onBind(Intent intent) {

Log.e("Service", "onBind");

//返回代理对象

return new MyBinder();

}

/**

* 代理类

*/

class MyBinder extends Binder {

public void showToast() {

Log.e("Service", "showToast");

}

public void showList() {

Log.e("Service", "showList");

}

}

/**

* 解除绑定服务时调用

* @param intent

* @return

*/

@Override

public boolean onUnbind(Intent intent) {

Log.e("Service", "onUnbind");

return super.onUnbind(intent);

}

/**

* 服务创建时调用

*/

@Override

public void onCreate() {

Log.e("Service", "onCreate");

super.onCreate();

}

/**

* 服务被销毁时调用

*/

@Override

public void onDestroy() {

Log.e("Service", "onDestroy");

super.onDestroy();

}

}

二、配置服务

三、绑定服务和解除绑定服务

我们通过两个按钮分别演示绑定服务和解除绑定服务,通过bindService()开启服务,通过unbindService()停止服务

public class MainActivity extends AppCompatActivity {

Button bt_open, bt_close;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/908285530.html,yout.activity_main);

bt_open = (Button) findViewById(R.id.open);

bt_close = (Button) findViewById(R.id.close);

final Intent intent = new Intent(this, BackGroupService.class);

bt_open.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

bindService(intent, conn, BIND_AUTO_CREATE);

}

});

bt_close.setOnClickListener(new View.OnClickListener() {

@https://www.doczj.com/doc/908285530.html,rride

public void onClick(View v) {

unbindService(conn);

}

});

}

ServiceConnection conn = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

//拿到后台服务代理对象

BackGroupService.MyBinder myBinder = (BackGroupService.MyBinder) service;

//调用后台服务的方法

myBinder.showToast();

myBinder.showList();

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

};

}

这里和startService的区别在于多了一个ServiceConnection对象,该对象是用户绑定后台服务后,可获取后台服务代理对象的回调,我们可以通过该回调,拿到后台服务的代理对象,并调用后台服务定义的方法,也就实现了后台服务和前台的交互

四、运行代码

运行程序后,我们点击绑定服务,然后一段时间后解除绑定服务。我们以Log信息来验证Service的生命周期:onCreate->onBind->onUnBind->onDestroy,其中也可以看到我们调用后台服务的方法showToast和showList

11-24 00:55:32.775 15408-15408/com.handsome.boke2 E/Service: onCreate

11-24 00:55:32.775 15408-15408/com.handsome.boke2 E/Service: onBind

11-24 00:55:32.796 15408-15408/com.handsome.boke2 E/Service: showToast

11-24 00:55:32.796 15408-15408/com.handsome.boke2 E/Service: showList

11-24 00:55:34.290 15408-15408/com.handsome.boke2 E/Service: onUnbind

11-24 00:55:34.290 15408-15408/com.handsome.boke2 E/Service: onDestroy

混合性交互的后台服务

或许你会迷惑,startService和bindService之间有什么关系?其实简单的说两者之间是没有关联的,类似于你亲妈生了个双胞胎一样,只有纯粹的血缘关系。那么问题来了,这两个启动方式是否可以同时使用呢,答案是可以的

将上面两种启动方式结合起来就是混合性交互的后台服务了,即可以单独运行后台服务,也可以运行后台服务中提供的方法,其完整的生命周期是:onCreate->onStartCommand->onBind->onUnBind->onDestroy

前台服务

由于后台服务优先级相对比较低,当系统出现内存不足的情况下,它就有可能会被回收掉,所以前台服务就是来弥补这个缺点的,它可以一直保持运行状态而不被系统回收。例如:墨迹天气在状态栏中的天气预报

一、创建服务类

前台服务创建很简单,其实就在Service的基础上创建一个Notification,然后使用Service 的startForeground()方法即可启动为前台服务

public class ForegroundService extends Service {

@Nullable

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public void onCreate() {

super.onCreate();

showNotification();

}

/**

* 启动前台通知

*/

private void showNotification() {

//创建通知详细信息

Notification.Builder mBuilder = new Notification.Builder(this)

.setSmallIcon(R.mipmap.ic_launcher)

.setContentTitle("2016年11月24日")

.setContentText("今天天气阴天,8到14度");

//创建点击跳转Intent

Intent intent = new Intent(this, MainActivity.class);

//创建任务栈https://www.doczj.com/doc/908285530.html,lder

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);

stackBuilder.addParentStack(MainActivity.class);

stackBuilder.addNextIntent(https://www.doczj.com/doc/908285530.html,ent);

PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);

//设置跳转Intent到通知中

mBuilder.setContentIntent(pendingIntent);

//获取通知服务

NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

//构建通知

Notification notification = mBuilder.build();

//显示通知

nm.notify(0, notification);

//启动为前台服务

startForeground(0, notification);

}

}

二、配置服务

三、启动前台服务

startService(new Intent(this, ForegroundService.class));

四、运行代码

我们可以看到状态栏确实增加了我们这条通知

当我们将该程序退出并杀掉的时候,通过设置->应用->选择正在运行中的应用,我们可以发现,我们的程序退出杀掉了,而服务还在进行着

IntentService

IntentService是专门用来解决Service中不能执行耗时操作这一问题的,创建一个IntentService也很简单,只要继承IntentService并覆写onHandlerIntent函数,在该函数中就可以执行耗时操作了

public class TheIntentService extends IntentService {

public TheIntentService(String name) {

super(name);

}

@Override

protected void onHandleIntent(Intent intent) {

//在这里执行耗时操作

}

}

AIDL跨进程服务

关于AIDL跨进程服务的使用和原理分析,可以见我另一篇博客:Android基础——初学者必知的AIDL在应用层上的Binder机制

AccessibilityService无障碍服务

关于AccessibilityService无障碍服务的使用和实例,可以见我另一篇博客:Android进阶——学习AccessibilityService实现微信抢红包插件

系统服务

系统服务提供了很多便捷服务,可以查询Wifi、网络状态、查询电量、查询音量、查询包名、查询Application信息等等等相关多的服务,具体大家可以自信查询文档,这里举例几个常见的服务

1. 判断Wifi是否开启

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);

boolean enabled = wm.isWifiEnabled();

需要权限

2. 获取系统最大音量

AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);

int max = am.getStreamMaxV olume(AudioManager.STREAM_SYSTEM);

3. 获取当前音量

AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);

int current = am.getStreamMaxV olume(AudioManager.STREAM_RING);

4. 判断网络是否有连接

ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

NetworkInfo info = cm.getActiveNetworkInfo();

boolean isAvailable = info.isAvailable();

需要权限

Android四大组件

Android四大组件 Android开发平台是开放的平台,而位于四层框架顶端的应用开发,必然涉及到Android组件。本文将为大家详细介绍Android组件。 组件(Component),在谈及所谓架构和重用的时候,是一个重要的事情。很多时候都会说基于组件的软件架构,指的是期望把程序做乐高似的,有一堆接口标准封装完整的组件放在哪里,想用的时候取上几个一搭配,整个程序就构建完成了。 在开篇的时候就在说,Android是一个为组件化而搭建的平台,它引入所谓Mash-Up的概念,这使得你在应用的最上层,想做的不组件化都是很困难的一件事情(底层逻辑,好吧,管不了...)。具体说来,Android有四大组件四喜丸子:Activity、Service、Broadcast Receiver、Content Provider。 Activity 做一个完整的Android程序,不想用到Activity,真的是比较困难的一件事情,除非是想做绿叶想疯了。因为Activity是Android程序与用户交互的窗口,在我看来,从这个层面的视角来看,Android的Activity特像网站的页面。 首先,一个网站,如果一张页面都没有,那...,真是一颗奇葩。而一张页面往往都有个独立的主题和功能点,比如登录页面,注册页面,管理页面,如是。 在每个页面里面,会放一些链接,已实现功能点的串联,有的链接点了,刷,跑到同一站点的另一个页面去了;有的链接点了,啾,可能跳到其他网站的页面去;还有的链接点了,恩...,这次没跑,但当前页面的样子可能有所变化了。这些模式,和Activity给人的感觉很像,只不过实现策略不同罢了,毕竟Android这套架构的核心思想,本身就来自源于Web的Mash-Up概念,视为页面的客户端化,也未尝不可。 Activity,在四大组件中,无疑是最复杂的,这年头,一样东西和界面挂上了勾,都简化不了,想一想,独立做一个应用有多少时间沦落在了界面上,就能琢磨清楚了。从视觉效果来看,一个Activity占据当前的窗口,响应所有窗口事件,具备有控件,菜单等界面元素。从内部逻辑来看,Activity需要为了保持各个界面状态,需要做很多持久化的事情,还需要妥善管理生命周期,和一些转跳逻辑。对于开发者而言,就需要派生一个Activity的子类,然后埋头苦干上述事情。对于Activity的更多细节,先可以参见:reference/android/app/Activity.html。后续,会献上更为详尽的剖析。 Service 服务,从最直白的视角来看,就是剥离了界面的Activity,它们在很多Android的概念方面比较接近,都是封装有一个完整的功能逻辑实现,只不过Service不抛头露脸,只是默默无声的做坚实的后盾。 但其实,换个角度来看,Android中的服务,和我们通常说的Windows服务,Web的后台服务又有一些相近,它们通常都是后台长时间运行,接受上层指令,完成相关事务的模块。

Android客户端与服务器数据交互流程

Android客户端与服务器数据交互流程 一个门户网站的制作的流程:首先,由网页设计师只做网页设计,即画出来网站在浏览器中显示的样子,然后由前端人员编写 Html+CSS+JS来实现网站的动态效果,比如说导航栏的下拉显示,然后Ajax的局部信息更新等,然后通过后台程序如JSP,PHP, .NET等语言将数据库中的信息与前台页面相结合,这样,一个站就这样被建好了。而Android客户端,也是有UI设计师,UI前端,程序构成的,同样程序这边的话,最近Html5+CSS3的火热开启,很多公司也需要html5+css3进行Android程序的开发了。呜呜,抢我的饭碗。虽然说哥也是懂html+css的。嘿嘿,这样解释的话,可能大家不清楚,其实木有必要弄清楚网站的建站过程,这里只是给大家普及一下知识,没必要弄清楚。 基础知识:我们需要知道,Http协议是基于TCP协议的,而TCP协议是一种有连接,可靠的传输协议,如果丢失的话,会重传。所以这样的话,就不会有数据的丢失了。而Http协议有三种方法,Get,Post,Head 方法,但是用的多的只有Get和Post方法,Get方法是将请求参数放在请求头中,所以请求的参数在URL中可见,而Post方法是将请求参数放在数据部分,所以在URL中不可见,Post相对来说保密,所以在提交重要信息的时候,用的都是HttpPost方法来实现的. 而在B/S模式中,B代表浏览器,S代表服务器,在浏览器和服务器的通信之中,因为B/S之间不会一直保持连接,所以才会加入Cookie 机制,来辨认所操作的对象。用户浏览网页的操作如下:当用户点击

一个连接或者一个按钮的时候,浏览器通过发送一个请求给服务器,然后由服务器接收该请求,然后解析到用户请求的是哪些内容,然后查找到相关资源,再将数据返回给浏览器,由浏览器解析数据,然后显示给用户看到用户所需要看到的页面。所以,Android和B/S模式差不多,其实也就是发送请求,接收数据,然后解析数据,显示到手机上的过程,没什么太大的区别,谁让咱用的是互联网,用的是TCP/IP 协议呢,是吧。要理解是:所有的操作都是向服务器请求数据的过程。 hp文件,然后浏览器会将php文件解析成为html然后显示在浏览器上显示。

Android程序设计教程教学大纲

《Android 程序设计课程》课程教学大纲 一、课程基本信息 二、理论教学内容及基本要求

1 Android 操作系统 本章主要对Android 的发展、特点、环境搭建和体系结构进行简要介绍。并且讲解了JDK、Eclipse、Android SDK 软件的下载及安装的基本知识。对Android 应用程序进行解析,提高读者对程序的创建、目录的结构、资源的管理以及对程序权限的理解。最后讲解如何调试Android 程序。 2 Android 生命周期与组件通信 本章主要讲述了Android 生命周期和组件之间的通信。生命周期主要讲述了Android四大组件之一的Activity 生命周期, 包括生命周期函数、栈结构和基本状态三方面。组件的通信靠Intent 实现, 以及Intent 基本构成。 3 Android 用户界面设计 本章主要从Android 用户界面开发出发, 讲述了开发过程中经常使用到的控件, 包括菜单、常用基础控件、对话框与消息框。界面中控件的结构及位置等需要通过有效的界面布局控制, Android 中提供了5 种界面布局格式, 即线性布局、相对布局、表格布局、绝对布局和框架布局。界面中还有一种必要的操作处理———外部操作的响应, 通过有效的事件机制完成。 4 Android 数据存储与交互 本章主要讲述了Android 数据存储与交互方面的内容, 系统中数据交互主要通过五种方式实现, 共享优先数据机制、SQLite 数据库、File 文件机制、内容提供器控件和网络存储。其中在应用程序中最常用也是最有效的数据交互方式是使用SQLite 数据库。 5 Android 后台服务与事件广播 本章主要讲述了Android 后台服务、事件广播和常驻程序。后台服务由系统提供的Service 组件实现, 可分为本地服务和远程服务。事件广播机制主要依靠BroadCast Reciver 组件实现。常驻程序AppWidget又称为窗口小部件, 是在HomeScreen上显示的小部件, 开发时常用AppWidgetProvider 和AppWidgetProviderInfo 类实现。 6 媒介与网络 本章介绍了Android 平台下通过程序实现音频、视频播放等操作。分别介绍了从源文件播放、文件系统播放和流媒体播放等方式。并且介绍了Android 图形绘制与特效, 包括图形的平移、旋转及缩放等操作, 保存指定格式图形文件。编写专业的绘图或控制图形动画的应用程序。以及如何使用Android 手机中内置的高性能WebKit 内核浏览器浏览网页, 使用HTTP 和URL 获得网络资源等内容。 7 Android NDK 本章介绍了Android NDK 的相关知识, 从NDK 的简单介绍到开发环境的

Android的系统服务一览

Android的系统服务一览 System_Server进程 运行在system server进程中的服务比较多,这是整个android框架的基础 Native服务 SurfaceFlinger 这是framebuffer合成的服务,将各个应用程序及应用程序中的逻辑窗口图像数据(surface)合成到一个物理窗口中显示(framebuffer)的服务程序 Java服务: 这部分的服务大部分都有一个供应用进程使用的manager类,这就是一个RPC 调用,用户通过调用xxxManager的方法,实际上被Binder给迁移到system_server 进程中对应的xxxManagerService中对应的方法,并将结果再通过binder带回。 1. EntropyService 熵服务,周期性的加载和保存随机信息。主要是linux开机后,/dev/random的状态可能是可预知的,这样一些需要随机信息的应用程序就可能会有问题。这个无需提供应用程序接口。 2. PowerManagerService –> PowerManager Android 的电源管理也是很重要的一部分。比如在待机的时候关掉不用的设备,待机时屏幕和键盘背光的关闭,用户操作的时候该打开多少设备等等。 3. ActivityManagerService->ActivityManager 这个是整个Android framework框架中最为核心的一个服务,管理整个框架中任务、进程管理, Intent解析等的核心实现。虽然名为Activity的Manager

Service,但它管辖的范围,不只是Activity,还有其他三大组件,和它们所在的进程。也就是说用户应用程序的生命管理,都是由他负责的。 4. TelephonyRegistry->TelephonyManager 电话注册、管理服务模块,可以获取电话的链接状态、信号强度等等。<可以删掉,但要看的大概明白> 5. PackageManagerService -> PackageManager 包括对软件包的解包,验证,安装以及升级等等,对于我们现在不能安装.so文件的问题,应该先从这块着手分析原因。 6. AccountManagerService -> AccountManager A system service that provides account, password, and authtoken management for all accounts on the device。 7. ContentService -> ContentResolver 内容服务,主要是数据库等提供解决方法的服务。 8. BatteryService 监控电池充电及状态的服务,当状态改变时,会广播Intent 9. HardwareService 一般是ring和vibrate的服务程序 10. SensorService -> SensorManager 管理Sensor设备的服务,负责注册client设备及当client需要使用sensor时激活Sensor 11. WindowManagerService -> WindowManager -> PhoneWindowManager 和ActivityManagerService高度粘合 窗口管理,这里最核心的就是输入事件的分发和管理。 12. AlarmManagerService -> AlarmManager 闹钟服务程序

(带答案)Android复习资料

选择题 1. 下面不是Android四大组件之一的(B ) A. Activity B.Intent C. Service D. ContentProvider 2. 下面关于广播叙述错误的是(A) A. 广播是Android四大组件之一 B. BroadcastReceiver有两种注册方式,静态注册和动态注册 C. 静态注册需要在Mainfest.xml中配置 D. 动态注册需要在应用退出时候接触广播的注册。 3. 下面关于BroadcastReceiver错误的是(B): A. BroadcastReceiver有两种注册方式,静态注册和动态注册。 B. BroadcastReceiver必须在AndroidMainfest文件中声明 C. BroadcastReceiver的使用,一定有一方发送广播,有一方监听注册广播,onReceive方法才会被调用。 D. 广播发送的Intent都是隐式启动。 4. 下面关于谁先接收广播顺序错误的是(B) A. 有序广播,优先级高的先接收 B. 有序广播,同优先级的动静态广播接收器,静态优先于动态。 C. 有序广播,同优先级的动态广播接收器,先注册的大于后注册的。 D. 普通广播时,无视优先级,动态广播接收器优先于静态广播接收器 5. 下面关于广播说法错误的是(B) A. 广播分为有序广播和无序广播 B. 使用abortBroadcast方法可以中断所有广播的传递。 C. 广播注册方式分为动态和静态

D. sendOrderBroadcast用来向系统广播有序事件,sendBroadcast()是用来广播无序事件。 6. 下列关于Intent启动组件说法错误的是(C) A.startActivity( ) B. startService( ) C. startBroadcastReceiver() D.startActivityForResult() 7. 对于广播的发送,Intent的启动方式是(B) A.显式启动 B. 隐式启动 C. A和B都可以 D. 以上说法都不正确。 8. 下面关于Notification的说法正确的是(D): A. NotificationManager man = new NotificationManager(); B. PendingIntent contentIntent= new PendingIntent(); C. RemoteViews contentView = new RemoteViews(); D. Notification notification = new Notification(); 9. 关于ContenValues类说法正确的是( A ) A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是String类型,而值都是基本类型 B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是任意类型,而值都是基本类型 C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名,可以为空,而值都是String类型 D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是String类型,而值也是String类型 10.在手机开发中常用的数据库是(A) A,SQLite3 B,Oracle C,Sql Server D,Db23

Android客户端与服务器数据交互流程

A n d r o i d客户端与服务器数 据交互流程 标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

Android客户端与服务器数据交互流程 一个门户网站的制作的流程:首先,由网页设计师只做网页设计,即画出来网站在浏览器中显示的样子,然后由前端人员编写 Html+CSS+JS来实现网站的动态效果,比如说导航栏的下拉显示,然后Ajax的局部信息更新等,然后通过后台程序如JSP,PHP, .NET等语言将数据库中的信息与前台页面相结合,这样,一个站就这样被建好了。而Android客户端,也是有UI设计师,UI前端,程序构成的,同样程序这边的话,最近Html5+CSS3的火热开启,很多公司也需要html5+css3进行Android程序的开发了。呜呜,抢我的饭碗。虽然说哥也是懂html+css的。嘿嘿,这样解释的话,可能大家不清楚,其实木有必要弄清楚网站的建站过程,这里只是给大家普及一下知识,没必要弄清楚。 基础知识:我们需要知道,Http协议是基于TCP协议的,而TCP协议是一种有连接,可靠的传输协议,如果丢失的话,会重传。所以这样的话,就不会有数据的丢失了。而Http协议有三种方法,Get,Post,Head方法,但是用的多的只有Get和Post方法,Get方法是将请求参数放在请求头中,所以请求的参数在URL中可见,而Post方法是将请求参数放在数据部分,所以在URL中不可见,Post 相对来说保密,所以在提交重要信息的时候,用的都是HttpPost方法来实现的. 而在B/S模式中,B代表浏览器,S代表服务器,在浏览器和服务器的通信之中,因为B/S之间不会一直保持连接,所以才会加入

Android基础应用课程标准

《Android基础》课程标准 一、课程定位 本课程是计算机专业基于Java方向的Android应用层程序开发的一门专业核心课程。作为Java程序设计、数据库原理与应用等课程的后续课程,主要在于培养学生应用Android技术进行Android应用程序开发的能力,并培养其良好的编程规范和职业习惯。 二、课程目标 通过案例驱动的学习和综合训练,熟练掌握Android应用程序开发的基本知识和技能,并能结合Android中的常用控件和四大系统组件进行Android应用程序的开发,并为后续Android高级知识的学习做下铺垫。在课程的学习中,培养诚实、守信、坚韧不拔的性格,培养善于沟通表达、善于自我学习、具备团队协作的能力。并养成规范的编码、按时交付软件等良好的工作态度。 (一)知识目标 1.掌握Android开发环境的搭建;熟悉Android应用的基本框架,了解Activity、layout的关系; 2.指导学生进行需求分析报告的拟定以及实训报告的编写; 3.熟练掌握Android常用的UI组件的用法,熟练使用Android的UI组件来搭建用户界面;掌握Android 中用户事件处理的基本方法; 4.掌握APP系统分层架构的搭建; 5.熟练掌握AdapterView相关UI组件以及Adapter模式、常见Adapter的定义; 6.熟悉Activity、Service和BroadcastReceiver的生命周期方法,熟练掌握它们的用法 7.熟悉Intent的用法,熟练使用Intent的诸多属性用途及用法; 8.熟练掌握Service与广播机制的使用和工作原理,为应用开发打下基础; 9.掌握SQLite的语法,熟练掌握Android SQLite 数据库的使用。能够用多种方式实现数据存储和数据 共享; 10.掌握Android的异步加载机制; 11.了解自定义控件的实现原理并掌握自定义技巧。 12.了解Android应用程序的屏幕适配、国际化方式及APP上架流程和盈利方式。 (二)职业能力目标

Android Service的使用

一、Service: (一)、Service 简介: 1、何谓“Service”? “Service” 意思即“服务”的意思,像Windows 上面的服务一样,服务是在后台上运行,承担着静悄悄的不为人所注意的工作。Service运行在后台,它是不可见的、无界面的程序。 Service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity,这个时候程序要在后台继续播放;比如检测SD卡上文件的变化;再或者在后台记录用户的地理信息位置的改变;或者启动一个服务来运行并一直监听某种动作等等。 2、Service概念的总结: ?Service在后台运行,不可以与用户直接交互; ?一个服务不是一个单独的进程。服务对象本身并不意味着它是在自己的进程中运行,除非另有规定,否则它与运行程序是同在一个进程中; ?一个服务不是一个单独的线程。Service和其他组件一样,默认情况下,Service中的所有代码都是运行在主线程中; ?Service存在的价值虽然不如Activity那么清晰。但是一般都让Service 执行耗时较长的操作。例如:播放音乐、下载文件、上传文件等等。但是因为Service默认运行在主线程中,因此不能直接用它来做耗时的请求或者动作,最好在Service中启动新线程来运行耗时的任务; ?需要通过某一个Activity或其他Context对象来启动Service。 context.startService() 或context.bindService(); ?Service很大程度上充当了应用程序后台线程管理器的角色。(如果Activity中新开启一个线程,当该Acitivyt关闭后,该线程依然在工作,但是与开启它的Activity失去联系。也就是说此时的这个线程处于失去管理的状态。但是使用Service,则可以对后台运行的线程有效地管理。) 3、为什么不使用后台线程而使用Service? ?1、Service可以放在独立的进程中,所以更安全; ?2、使用Service可以依赖现有的binder机制,不需要在应用层面上处理线程同步的繁杂工作; ?3、系统可以重新启动异常死去的Service。 4、Service 与Activity 的相同点与不同点: ?不同点:Activity是与用户交互的组件,即可以看到UI界面,而Service 是在后台运行、无需界面;

如何让Android service变成前台应用

Android的前台Service Service几乎都是在后台运行的,一直以来它都是默默地做着辛苦的工作。但是Service的系统优先级还是比较低的,当系统出现内存不足情况时,就有可能会回收掉正在后台运行的Service。如果你希望Service可以一直保持运行状态,而不会由于系统内存不足的原因导致被回收,就可以考虑使用前台Service。 前台Service和普通Service最大的区别就在于,它会一直有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的效果。当然有时候你也可能不仅仅是为了防止Service被回收才使用前台Service,有些项目由于特殊的需求会要求必须使用前台Service,比如说墨迹天气,它的Service在后台更新天气数据的同时,还会在系统状态栏一直显示当前天气的信息,如下图所示:

那么我们就来看一下如何才能创建一个前台Service吧,其实并不复杂,如下所示: 这里只是修改了Service中onCreate()方法的代码。可以看到,我们首先创建了一个Notification对象,然后调用了它的setLatestEventInfo()方法来为通知初始化布局和数据,并在这里设置了点击通知后就打开MainActivity。然后调用startForeground()方法就可以让MyService变成一个前台Service,并会将通知的图片显示出来。 现在重新运行一下程序, Service就会以前台Service的模式启动了,并且在系统状态栏会弹出一个通栏图标,下拉状态栏后可以看到通知的详细内容,如下图所示:

Android复习练习题

一、单选题 退出activity对一些资源以及状态的操作保存,可以在生命周期 的哪个函数中进行( A ) A、onPause() B、onCreate() C、onResume() D、onStart() Android项目工程下面的assets目录的作用是什么( B ) A、放置应用到的图片资源。Res/drawable B、主要放置一些文件资源,这些文件会被原封不动打包到apk里面 C、放置字符串,颜色,数组等常量数据res/values D、放置一些与UI相应的布局文件,都是xml文件res/layout 下列不属于android布局的是( C ) A、FrameLayout B、LinearLayout C、BorderLayout D、TableLayout E、RelativeLayout Intent的作用的是( A ) A、intent是连接四大组件的纽带,可以实现界面间切换,可以包含动作和动作数据; B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失service C、实现应用程序间的数据共享contentprovider D、处理一个应用程序整体性的工作 下列哪个是AbsoluteLayout中特有的属性( B ) A、android:layout_height B、android:layout_x C、android:layout_above D、android:layout_toRightOf RatingBar组件中不能用属性直接设置的是( D) A、五角星个数 B、当前分数 C、分数的增量 D、五角星的色彩 在手机开发中常用的数据库是( A ) A、,sqlLite B、Oracle C、SqlServer D、Db23 关于BroadcastReceiver的说法不正确的是( B ) A)是用来接收广播Intent的 B),一个广播Intent只能被一个订阅了此广播的BroadcastReceiver所接收 C)对有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者 D)接收者声明的优先级别在的android:priority属性中声明,数值越大优先级别越高 使用MediaPlayer播放保存在sdcard上的mp3文件时( C ) A)需要使用方法创建MediaPlayer B)直接newMediaPlayer即可 C)需要调用setDataSource方法设置文件源D)直接调用start方法,无需设置文件源在android中使用RadioButton时,要想实现互斥的选择需要用的组件是(D ) A)ButtonGroup B)RadioButtons C)CheckBox D)RadioGroup 在多个应用中读取共享存储数据时,需要用到的query方法,是哪个对象的方法( A ) A)ContentResolver B)ContentProvider C)Cursor D)SQLiteHelper DDMS中Log信息分为几个级别( C ) A)3 B)4 C)5D)6 能够自动完成输入内容的组件是( D )

Android复习练习题

一、单选题 退出 activity 对一些资源以及状态的操作保存,可以在生命周期 的哪个函数中进行( A ) A、onPause() B、onCreate() C、onResume() D、onStart() Android 项目工程下面的 assets 目录的作用是什么 ( B ) A、放置应用到的图片资源。 Res/drawable B、主要放置一些文件资源,这些文件会被原封不动打包到 apk 里面 C、放置字符串,颜色,数组等常量数据 res/values D、放置一些与 UI 相应的布局文件,都是 xml 文件 res/layout 下列不属于android布局的是( C ) A、FrameLayout B、LinearLayout C、BorderLayout D、TableLayout E、RelativeLayout Intent 的作用的是 ( A ) A、intent是连接四大组件的纽带,可以实现界面间切换,可以包含动作和动作数据; B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失 service C、实现应用程序间的数据共享 contentprovider D、处理一个应用程序整体性的工作 下列哪个是AbsoluteLayout中特有的属性 ( B ) A、android:layout_height B、android:layout_x C、android:layout_above D、android:layout_toRightOf RatingBar组件中不能用属性直接设置的是( D) A、五角星个数 B、当前分数 C、分数的增量 D、五角星的色彩 在手机开发中常用的数据库是( A ) A、,sqlLite B、Oracle C、Sql Server D、Db23 关于BroadcastReceiver的说法不正确的是( B ) A)是用来接收广播Intent的 B),一个广播Intent只能被一个订阅了此广播的BroadcastReceiver所接收 C)对有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者 D)接收者声明的优先级别在的android:priority属性中声明,数值越大优先级别越高 使用MediaPlayer播放保存在sdcard上的mp3文件时( C ) A)需要使用MediaPlayer.create方法创建MediaPlayer B)直接newMediaPlayer即可C)需要调用setDataSource方法设置文件源D)直接调用start方法,无需设置文件源在android中使用RadioButton时,要想实现互斥的选择需要用的组件是(D ) A)ButtonGroup B) RadioButtons C)CheckBox D)RadioGroup 在多个应用中读取共享存储数据时,需要用到的query方法,是哪个对象的方法?( A ) A)ContentResolver B)ContentProvider C)Cursor D)SQLiteHelper DDMS中Log信息分为几个级别( C ) A)3 B)4 C)5 D)6 能够自动完成输入内容的组件是( D )

Android连接服务器方法

由于刚接触android开发,故此想把学到的基础知识记录一下,以备查询,故此写的比较啰嗦: 步骤如下: 一、介绍: 此文主要是介利用android网络通信功能把android客户端的数据传给web服务端进行操作 此项目列举三个个传值方式:1、GET方式,2、POST方式,3、HttpClient 方式 二、新建一个android工程——NewsManage 工程目录: 三、AndroidManifest.xml配置清单 由于要访问网络,故需要添加网络访问权限,红色标注添加部分

Android应用开发经典面试题

Android应用开发经典面试题 1、Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑 service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相 关的食物,定义好需要接受的Intent提供同步和异步的接口 Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的借口模型,大大简化上层应用,对数据的整合提供了更方便的途径 BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单 处理,转换成一条Notification,统一了Android的事件广播模型 2、请介绍下Android中常用的五种布局。 常用五种布局方式,分别是:FrameLayout(框架布局),LinearLayout(线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。 一、FrameLayout:所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放 一点比较简单的东西。 二、LinearLayout:线性布局,每一个LinearLayout里面又可分为垂直布局 (android:orientation=”vertical”)和水平布局(android:orientation=”horizontal”)。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。 三、AbsoluteLayout:绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。 四、RelativeLayout:相对布局可以理解为某一个元素为参照物,来定位的布局方式。主 要属性有:相对于某一个元素android:layout_below、android:layout_toLeftOf相对于父 元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;五、TableLayout:表格布局,每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。

Android四大组件的详细讲解

Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起。在manifest中,描述了每一个组件以及组件的作用,其中有6个组件,它们是Android 应用程序的基石: Activities(活动)应用程序的显示层。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于一张Form。你在这章中将会学习到更多关于Activities。 Services(服务)Android应用程序中不可见的“工人”。Service组件运行时不可见,但它负责更新的数据源和可见的Activity,以及触发通知。它们常用来执行一些需要持续运行的处理,当你的Activity已经不处于激活状态或不可见。你将在第8章学习怎样创建Service。 Content(内容)提供共享的数据存储。Content Provider(内容提供器)用来管理和共享应用程序的数据库。在应用程序间,Content Provider是共享数据的首选方式。这意味着,你可以配置自己的Content Provider去存取其他的应用程序或者通过其他应用程序暴露的Content Provider去存取它们的数据。Android设备本身包含了几个Content Provider来访问像联系人信息等有用的数据库。你将在第6章学习怎样创建和使用Content Provider。 Intents(意图)简单的消息传递框架。使用Intent,你可以在整个系统内广播消息或者给特定的Activity或者服务来执行你的行为意图。系统会决定那个(些)目标来执行适当的行为。 Broadcast Receivers(广播接收器)Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符合特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段。 Notifications(通知)用户通知的框架。Notification用来在不需要焦点或不中断它们当前Activity的情况下提示用户。它们是Service或Broadcast Receiver获得用户注意的首选方式。例如,当设备收到文本信息或外部来电时,它通过闪光,发声,显示图标或显示对话框信息来提醒你。在第8章里,你可以使用Notification来触发这些事件。 一、Activity详解 Activty的生命周期的也就是它所在进程的生命周期。

Android选择题集锦

下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是? 选择一项: a. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念. b. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念. c. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik 虚拟机实例.而每一个DVM 不一定都是在Linux 中的一个进程,所以说不是一个概念. d. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念. 题目2 下列选项哪个不是Activity启动的方法? a. goToActivity b. startActivity c. startActivityFromChild d. startActivityForResult 题目3 解析xml 的方式有() a. 字符器类型 b. 流方式 c. dom d. SAX 题目4 下列哪一个不属于Activity的生命周期方法? a. onInit( ) b. onStart( ) c. onStop( ) d. onPause( )

Android SERVICE后台服务进程的自启动和保持

Android SERVICE后台服务进程的自启动和保持 Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要(见不得人)的任务。而一些安全软件,如360等,会有结束 进程的功能,如果不做Service的保持,就会被其杀掉。 在早些时候,我们可以通过在 1. service中重写onStartCommand方法,这个方法有三个返回值, START_STICKY 是service被kill掉后自动 public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } 2. 配置android:persistent="true" 3. setForeground(true); 4. android:process=”com.xxx.xxxservice”配置到单独的进程中 以上的方法要么只是提升service优先级或者存活率, 并不能解决被安全软件强行 杀死的问题。要么像第四种单独的进程运行service在360老的版本是可以的,但是在360的比较新的版本中仍然会被杀死. 如何保持Service的运行状态是现在要说明的,核心就是利用ANDROID的系统广播,触发自己的程序检查Service的运行状态,如果被杀掉,就再起来。 常用的有开机广播,解锁屏幕的广播,电量变化等等,其中解屏的广播算比较频 繁的了,但是也并不能保证一定的频率,尤其是在特定的时间里(比如用户睡觉的时候,用户并不进行解锁操作).而我们仍要做一些操作的时候,就没有办法了。 因此,我采用了一种别的方案. 另外再加上两个类似一守护进程的Service,分别检查Service的运行状态,注册响应的广播,对其进行守护,一旦发现没有运行就将其 启动. 我利用的系统广播是:Intent.ACTION_TIME_TICK。这个广播每分钟发送一次, 我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。它的优点就是间隔时间短而且非常稳定, 而其他的广播并不能保证这一点,当然,在具体的应用中还是要根据需求使用, 结合其他广播来保证自己的service一定会 被重启。毕竟现在安全软件是越来越厉害了,更新得也是非常频繁. 有时间还是要看下还有没有其他的方法,综合几种来使用.

ANDROID应用开发试题

Android应用开发试题 一、选择题(每题2分,共30分) 1.下列不是手机操作系统的是?()D A.Android B.Window Mobile C.Apple IPhone IOS D.windows vista 2.Android的VM虚拟机是哪个?A A.Dalvik B.JVM C.KVM D.framework 3.AndroidVM虚拟机中运行的文件的后缀名为()C A.class B.apk C.dex D.xml 4.下列选项是Activity启动的方法有()ACD A.startActivity B.goToActivity C.startActivityForResult D.startActivityFromChild 5.下列哪个可做EditText编辑框的提示信息?()D A.android:inputType B.android:text C.android:digits D.android:hint 6.关于Activity的描述,下面哪个是错误的?AD A.一个Android程序中只能拥有一个Activity类 B.Activity类都必须在Androidmaniefest.xml中进行声明 C.系统完全控制Activity的整个生命周期 D.Activity类必须重载onCreate方法 7.关于widget(组件)属性的写法,下面哪个是正确的?ABC A.android:id=”@+id/tv_username” B.android:layout_width=”100px” C.android:src=”@drawable/icon” D.android:id="@id/tabhost" 8.下面哪个不是Android SDK中的ViewGroup(视图容器)?D A.LinearLayout B.ListView C.GridView D.Button 9.下列哪个不是Activity的生命周期方法之一?()B A.onCreate B.startActivity C.onStart D.onResume 10.MediaPlayer对象从停止状态到播放状态调用的方法是()AB A.prepare() B.start() C.reset() D.release() 11.下面说法错误的是()BC A.Android采用单线程模型 B.Android会默认会为线程创建一个关联的消息队列 C.Handler会与多个线程以及该线程的消息队列对应 D.程序组件首先通过Handler把消息传送给Looper,Looper把消息放入队列12.android中下列属于Intent的作用的是()C A实现应用程序间的数据共享 B是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失 C可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带D处理一个应用程序整体性的工作 13.关于应用程序的生命周期,一个Activity从启动到运行状态需要执行3个方

相关主题
文本预览
相关文档 最新文档