目录

    • 一、Android系统架构分为哪四个层次,每一层所提供的基本功能是什么?
    • 二、Android项目资源程序文件夹res中,子文件夹layout、values、drawable、raw各有什么作用?
    • 三、Android四大核心组件是什么,分别起什么作用?
    • 四、主Activity如何在清单文件里进行注册?
    • 五、常用的布局类型及其特点。
    • 六、Activity组件的基本方法:setContentView;findViewById。
    • 七、常用Widget控件的使用:
    • 八、Activity组件显式调用和隐式调用的定义与区别。
    • 九、Activity组件调用的基本方法:startActivityForResult,onActivityResult。
    • 十、数据类型Bundle的用法。
    • 十一、Android应用权限申请的方法:清单文件注册,checkSelfPerrnission,requestPermissions,onRequestPermissionsResult。
    • 十二、一些常用的权限:短信、电话、联系人。
    • 十三、两种打电话程序设计的区别:(1)使用系统自带的拨号程序;(2)立即拨打指定电话。
    • 十四、两种发短信程序设计的区别:
    • 十五、服务的显式启动和隐式启动的定义与区别。
    • 十六、非绑定服务的基本方法:startService,stopService。
    • 十七、绑定服务的基本方法:bindService,unbindService,onServiceConnected,onServiceDisconnected。
    • 十八、本地服务与远程服务的区别。
    • 十九、BroadcastReceiver组件的静态注册和动态注册方法。
    • 二十、BroadcastReceiver组件的基本方法:onReceive,registerReceiver,sendBroadcast。
    • 二十一、SQLite数据库的创建与打开:使用SQLiteOpenHelper类的构造方法。
    • 二十二、 SQLiteOpenHelper类的基本方法:onCreate,onUpgrade,getReadableDatabase,getWritableDatabase。
    • 二十三、SQLite数据库的CRUD方法:使用SQLiteDatabase工具类。
    • 二十四、 SQLiteDatabase类的基本方法:execSQL,rawQuery,insert,update,delete(),Query,原生方法与非原生方法的区别。
    • 二十五、接口Cursor的常用方法:getCount,moveToFirst,moveToLast,moveToNext,getColumnIndex,getString。
    • 二十六、ContentProvider组件的注册。
    • 二十七、ContentProvider组件的基本方法:onCreate,query,insert,delete,update。
    • 二十八、ContentProvider组件的使用方法:使用内容解析器ContentResolver。
    • 二十九、AndroidUI主线程的特点。
    • 三十、Handler类的基本方法:handleMessage,sendMessage。
    • 三十一、AsyncTask类的基本方法:onPreExecute,doInBackground,onProgressUpdate,onPostExecute,execute。
  • 三十二、程序设计:

2017级《移动编程技术》复习提纲

一、Android系统架构分为哪四个层次,每一层所提供的基本功能是什么?

从上到下依次是 应用程序层(Application)、应用程序框架层(Application Framework)、函数库和Android运行时环境层(Libraries&Android RunTime)、Linux内核层(Linxu Kernel)

(1)应用程序层:

应用程序层提供了一系列核心应用程序,如浏览器、通讯录、相册、
地图和电子市场等。

(2)应用程序框架层:

应用程序框架层提供了 Android 平台的管理功能和组件重用机制,包 括 活 动 管 理 器 (
Activity Manager ) 、 窗 口 管 理 器 ( Window Manager)、内容提供者(Content Provider)、视图系统(View System)、包管理器(Package Manager)、通信管理器(Telephony Manager )
、 资 源 管 理 器 ( Resource Manager ) 、 位 置 管 理 器 (Location Manager)和通知管理器(Notification Manager)。

(3)函数库和Android运行时环境层

1、提供了一组可以调用的基于 C/C++的函数库;

2、Android 运行时环境由核心库和 Dalvik 虚拟机构成。核心库为开发人员提供了Android系统的特有函数功能和Java语言的基本函数功能; Dalvik虚拟机采用适合内存和处理器受限的专用格式。

(4)Linux内核层:

Linux
内核是硬件和其他软件堆层之间的一个抽象隔离层,提供由操作系统内核管理的底层基础功能,主要有安全机制、内存管理、进程管理、网络协议栈和驱动程序等。

二、Android项目资源程序文件夹res中,子文件夹layout、values、drawable、raw各有什么作用?

1.布局文件夹res/layout

布局文件夹 res/layout 用来存放扩展名为.xml 的布局文件,由某种布局管理器管理的若干控件对象组成,供Activity组件使用。

2.值文件夹res/values

存放一些资源文件的信息,用于读取文本资源,值文件夹res/values里的strings.xml是非常重要的文件,通常存放着布局文件中控件对象的属性值。

3.图像文件夹res/drawable

与 Windows应用程序一样,每个 Android 应用项目都有一个图标。 Android应用默认使用的图标文件ic_launcher是一个绿色的机器人,其文件格式是.xml,存放在文件夹res/mipmap里。更改Android应用默认 图标的一种方法:右击mipmap→New→Vector Asset→Clip
Art。另一 种方法:先将.png格式的文件,复制到文件夹res/drawable中,然后通
过R文件引用该图像文件。

4.声音文件夹res/raw

项目使用的音频文件,通常存放在res/raw文件夹里。

三、Android四大核心组件是什么,分别起什么作用?

Activity 、Service 、BroadcastReceiver 和ContentProvider。


Activity是Android组件负责用户界面的设计,界面框架采用MVC模式(Model View Controller) 。控制器负责接受并响应程序的外部动作;通过视图反馈应用程序给用户的信息(UI 界面反馈);模型是应用程序的核心,用于保存数据和代码。


Service 是Android 提供的无用户界面、长时间在后台运行的组件。Android 提供了许多系统服务程序。


BroadcastReceiver (广播接收者)接收来自系统或其他应用程序的广播,并做出回应。


为了跨进程共享数据,
Android 提供了ContentProvider 接口,可以在无须了解数据源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作。

四、主Activity如何在清单文件里进行注册?

注册主 Activity 时, 还需要内嵌<intent-filter>、<action>和<category>标签,以此说明 该 Activity 为 Android 应用程序的入口。定义一个MainActivity.java为
应用的主Activity代码如下:

五、常用的布局类型及其特点。

1.线性布局

以水平或垂直方向排列。

垂直线性布局时,每个控件占一行;水平线性布局时,控件自左向右排列,控件太多时也不会转行。

2.相对布局

通过相对定位排列。

除了第一个元素外,其他元素需要参考另一个元素进行相对定位。

3.约束布局

未约束的控件会出现在屏幕左上角(0,0)的位置。

4.帧布局

帧布局像一层层画布,添加的控件一层层地放上去。

帧布局添加的各个控件默认都将对齐到屏幕的左上角。

六、Activity组件的基本方法:setContentView;findViewById。

setContentView()呈现内容视图,并以布局文件参数

findViewById()根据定义的id去找到该控件

七、常用Widget控件的使用:

(1)TextView的基本方法:getText;setText。

使用方法setText(v)赋值时,如果v的类型为int等类型,则由于参数类型一致而导致运行时异常(程序闪退),尽管没有语法错误 和编译错误提示。此时,解决的办法是使用v+″″代替v。

(2)Button的基本方法:setOnClickListener;onClick。

Button
控 件 对 象 通 过 setOnClickListener()方法设置单击事件监听器,方法参数为一个实现了android.view.View.OnClickListener接口的对象。1、方法里匿名类 2、activity实现接口 3、内部类

(3)RadioGroup,RadioButton,CheckBox三种控件的作用。

RadioGroup
为 单 选 按 钮 组
控 件 , 它 包 含 若 干 单 选 按 钮 控 件 RadioButton。通过这两个控件,可以为用户提供一种“多选一”的选择
方式。

CheckBox
为复选框控件,通过使用父类 CompoundButton 提供的方法 isChecked()来判断用户是否勾选该复选框。

(4)ListView的基本方法:setAdapter;setOnItemClickListener;

OnItemClickListener。

ListView控件的数据适配器都继承抽象类BaseAdapter,抽象类 BaseAdapter 实现了 ListAdapter 接口,同时又是类 ArrayAdapter 和SimpleAdapter的超类。

在Android系统类库中,抽象类AdapterView是ListView的超类(但不是 直接父类),提供了设置列表项单击事件监听器的重要方法
setOnItemClickListener()和内部接口OnItemClickListener,用以定义
用户选择了某个列表项后的动作

八、Activity组件显式调用和隐式调用的定义与区别。

显式调用是通过组件名 来完成的调用

隐式调用是通过意图过滤器(IntentFilter)来实现的,它没有明确指出 目标组件的名称。

显式调用需要明确地指定被启动对象的组件信息,包括包名和类名,而隐式调用则不需要明确指定组件信息。

九、Activity组件调用的基本方法:startActivityForResult,onActivityResult。

Activity 组件调用时可能存在数据的传递。此时,需要使用 Activity
具有的方法startActivityForResult(Intent
intent,int requestCode)去打开 一个新的
Activity,新的Activity 关闭后会向先前的Activity传回数据。
为了得到传回的数据,必须在主调Activity组件里重写方法
onActivityResult(int requestCode,int resultCode,Intent data)。其 中,使用Intent对象携带数据,其数据类型可以是String和Bundle等。

十、数据类型Bundle的用法。

Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的。

Bundle经常使用在Activity之间或者线程间传递数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。

当Bundle传递的是对象或对象数组时,必须实现Serializable 或Parcelable接口。

Bundle提供了各种常用类型的putXxx()/getXxx()方法,用于读写基本类型的数据。如putString()、getString()、putInt()、getInt()….

十一、Android应用权限申请的方法:清单文件注册,checkSelfPerrnission,requestPermissions,onRequestPermissionsResult。

权限划分为普通权限和危险权限。

一个应用,如果只涉及多个危险权限组,在 Activity 组件里,应先筛 选未授权的危险权限到一个数组里,然后集中动态申请;在权限回调 方法中,如果检测到有权限未授予,则会给出消息提示后销毁当前的
Activity组件。一个包含有3个权限组的示例代码框架如下:

在Android组 件 程 序 里 , 如 果 没 有 重 写 onRequestPermissionsResult()方法,在首次运行时,尽管赋予了所有权限,但不会立即生效,而以后运行时会因有权限而正常。

十二、一些常用的权限:短信、电话、联系人。

十三、两种打电话程序设计的区别:(1)使用系统自带的拨号程序;(2)立即拨打指定电话。

(1).使用系统自带的拨号程序拨打电话

调用系统自带的拨号程序,不需要任何权限,其实现代码如下:

(2).立即拨打指定电话

立即拨打电话,不会调用系统的拨号程序,在用户输入电话并单击按
钮后立即呼叫。需要注册、动态申请权限。

在清单文件中,注册电话权限:

Activity组件包含了危险权限的动态检测与申请,其完整代码如下:

注意: 拨打固定电话时,需要在电话前加区号。

十四、两种发短信程序设计的区别:

(1)使用系统自带的短信程序;

(2)使用短信管理器立即发送短信。

(1)使用系统的短信程序

调用系统自带的短信程序,不需要任何权限,其实现代码如下:

(2)使用短信管理器,立即发送短信

使用短信管理器发送短信,需要在清单文件中注册如下两个权限:

然后在Activity组件中动态检测和申请

十五、服务的显式启动和隐式启动的定义与区别。

显式启动:使用非绑定方式,在Intent对象里设置 Service所在的类,并调用方法startService(Intent)启动Service。

隐式启动:指在注册Service的同时,还内嵌了标签<intent-filter>及 <action>。其中,<action>标签的android:name属性指定了引用该服务的名称。在intent对象的构造方法中传入服务名称,便可调用方法startService(Intent)启动Service。

隐式启动的好处是不需要指明需要启动哪一个Activity,而由Android 系统根据Intent的动作和数据来决定,这样有利于降低 Android 组件之间的耦合度,强调 Android 组件的可复用性。

注意: 若Service与调用它的组件在同一个应用程序中,则既可以使用显式启动,也可以使用隐式启动(显式启动代码更简洁);若Service 和调用服务的组件在不同的应用程序中,则只能使用隐式启动方式。

十六、非绑定服务的基本方法:startService,stopService。

在包android.app内,提供抽象类Service启动和停止Service是由其他组件完成的。例如,组件Activity的超类 Context 提 供 启 动 和 停 止 Service 的 方 法 startService ( ) 和 stopService()等

十七、绑定服务的基本方法:bindService,unbindService,onServiceConnected,onServiceDisconnected。

一个组件还可以与一个Service进行绑定来实现组件之间的交互,甚至可以执行IPC (Inter-Process Communication)进程间通信。被绑定的服务依附在主进程上,而不是独立的进程,这能在一定程度上节约系统资源。

使用bindService(Intent,ServiceConnection,int)方法启动Service的生命周期和Activity对象一致, 也就是说,使用bindService()方法启动Service后,Service就与调用
bindService()方法的进程共存,当调用bindService()方法的进程 结束了,那么它绑定的Service也要跟着被结束。通常,在Activity 的 onStop()回调函数中加上取消绑定 Service 的方法 unbindService() 来停止服务连接。

绑定服务要通过服务连接接口 android.content.ServiceConnection 类型 的对象获取Service中的状态和数据信息。必须重写onServiceConnected(ComponentName name,
IBinder service),

onServiceDisconnected
(ComponentName name)方法

十八、本地服务与远程服务的区别。

远程服务指的是服务和访问者不在同一个应用程序中,即不在同一个进程中。

访问远程服务类似进程间通信。

本地服务是使用的服务含于应用的内部,即不存在跨进程调用。

本地服务可以显示/隐式调用,而远程服务只能隐式。

十九、BroadcastReceiver组件的静态注册和动态注册方法。

广播接收者在清单文件中的注册是通过使用标签<receiver>完成的, 这种注册方式称为静态注册。

动 态 注 册 是
在 程 序 里 通 过 使 用 Context 类 提 供 的 方 法
registerReceiver()完成的。对于操作特别频繁的广播事件(如锁屏 和解锁),其广播接收者在清单文件里面注册是无效的,只能在代码 里进行动态的注册。

二十、BroadcastReceiver组件的基本方法:onReceive,registerReceiver,sendBroadcast。

广播接收组件 BroadcastReceiver 主要提供了处理广播的抽象方法 onReceive() 。

一个BroadcastReceiver 对象的生命周期从调用 onReceive(Context,Intent)方法开始,到该方法返回结束。

动 态 注 册 是
在 程 序 里 通 过 使 用 Context 类 提 供 的 方 法
registerReceiver(BroadcastReceiver receiver,
IntentFilter if)完成的。

广播消息实质上就是将一个Intent对象用sendBroadcast(Intent intent)方法发送出去。在Android系统中,上下文类Context(为抽象类)提供了发送广播 的抽象方法。

二十一、SQLite数据库的创建与打开:使用SQLiteOpenHelper类的构造方法。

SQLiteOpenHelper(Context,String, CursorFactory, int)

SQLiteOpenHelper(Context,String, CursorFactory, int, DatabaseErrorHandler)

二十二、 SQLiteOpenHelper类的基本方法:onCreate,onUpgrade,getReadableDatabase,getWritableDatabase。

SQLiteOpenHelper的两个抽象方法 onCreate()和 onUpgrade(),编写数据库的操作代码,如创建表、插入记录等;onUpgrade()在提高数据库版本时执行;

使用 SQLiteOpenHelper 的方法 getReadableDatabase ()获得可读的数据库对象,getWritableDatabase ( ) 获 得 可写的SQLiteDatabase
类型的数据库对象。

二十三、SQLite数据库的CRUD方法:使用SQLiteDatabase工具类。

原生方法:execSQL(String,Object[])方法较execSQL(String)而言,在 SQL命令中支持通配符“?”。

非原生方法:insert()、update()、delete()和query()中的第1个 参数都是表名。

执行
insert()等方法,本质上也是执行 SQL 命令,只是系统已经组装相关参数为完整的SQL语句。

SQLiteDatabase
的方法 insert()和 update()都包含了 ContentValues 类型的参数,类ContentValues提供了“键—值”对形式的数据。插入记录常用方法为insert(table,null,contentValues)。

二十四、 SQLiteDatabase类的基本方法:execSQL,rawQuery,insert,update,delete(),Query,原生方法与非原生方法的区别。

1、原生方法传入参数为完整的sql语句,非原生方法较为灵活,只需按需传入表名、内容、条件等;

2、在数据库大的情况下,还是有差别的。execSql省去了拼接sql语句的步骤,要比SqliteDatabase提供的insert,query,update,delete等函数效率高。当数据库越大,差别也越大。

二十五、接口Cursor的常用方法:getCount,moveToFirst,moveToLast,moveToNext,getColumnIndex,getString。

getCount()返回找到的记录数

moveToFirst()指向查询结果的第一条记录

moveToLast()指向查询结果的最后一条记录

moveToNext()指向下一条记录

getColumnIndex()获取该列数据的index(索引)。返回值为int.

getString(int i)获取第i列的值

二十六、ContentProvider组件的注册。

name为必填属性,表示ContentProvider子类的名称;authorities 也是必填属性,表示其他应用程序访问该ContentProvider时的路径,
相当于访问Web服务器的域名,原则上可以任意定义,但一般还是使 用ContentProvider子类的存放路径。

注意:

清单文件中的<provider>标签还有一个任选属性permission,用 于对本应用提供数据访问的限定。当省略 permission 属性时,表示任何应用都可以访问本应用提供的数据。

二十七、ContentProvider组件的基本方法:onCreate,query,insert,delete,update。

二十八、ContentProvider组件的使用方法:使用内容解析器ContentResolver。

(1)ContentResolver与ContenProvider具有相同的CRUD方法。

(2)ContentResolver的方法insert(Uri url,ContentValues values)将一条记录的数据插入到Uri 指定的地方,并返回最新添加那个记录的 URI。

二十九、AndroidUI主线程的特点。

在Android四大组件中,Activity、Service和BroadcastReceiver都工作在主线程上,因此,任何耗时的操作都会降低用户界面的响应速度,甚至导致用户界面失去响应。。因此,UI Thread所执行的每一个函数,所花费的时间应该是越短越好。而其他比较费时的工作,如访问网络、下载数据和查询数据库等,都应该交由子线程去执行,以免阻塞主线程。

在Android应用中,如果有5s的主线程堵塞系统就会强退。

不能在子线程中更新UI,应使用异步请求,如Handler机制。

三十、Handler类的基本方法:handleMessage,sendMessage。

一般地,在主线程中实例化一个 Handler 并实现其内部接口的回调方 法(通常用于UI更新),在子线程中调用其发送消息sendMessage() 方法

注意: 使用Handler发送消息代码只能在子线程里

三十一、AsyncTask类的基本方法:onPreExecute,doInBackground,onProgressUpdate,onPostExecute,execute。

定义一个异步任务类 AsyncTask 的实例时,需要重写其抽象方法 doInBackground()和另一个受保护的方法onPostExecute(),

三十二、程序设计:

  1. 有数据传递的Activity调用与返回。

在MainActivity组件程序对应的布局文件里,定义了两个Button按钮。 单击按钮后,启动对应的Activity组件程序。调用其他主调组件的代码
如下:

其中,在清单文件里,对被调组件的配置代码如下:

第2个Activity组件的代码如下:

第3个Activity组件接收传递的捆绑数据,返回前设置非捆绑数据和结果码,其代码如下:

  1. 打电话程序设计。(上面已有)

  2. 以绑定方式和非绑定方式调用后台音频播放服务。

非绑定:


绑定:

  1. 以动态方式注册使用自定义广播。(已有)

  2. 使用Handler向UI线程传递消息。(已有)

  3. 使用AsyncTask更新UI线程。(已有)

三十三、Activity生命周期

移动编程基础知识(复习提纲)相关推荐

  1. java基础知识复习(上半)

    java基础知识复习 java为什么被发明? Green项目的确立,应用于像电视盒一样的消费类电子产品,语言本身本身中立. java的三大版本? javaSE的定位在于客户端,只要用于桌面应用软件的编 ...

  2. 考试备战系列--软考--02基础知识复习

    这部分主要是计算机基础知识的概念介绍,相关系列文章如下所示. 考试备战系列--软考--01基础架构概念 考试备战系列--软考--02基础知识复习 考试备战系列--软考--03综合知识复习 考试备战系列 ...

  3. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  4. linux基础知识复习

    @(tigerfive)[linux,基础知识,复习笔记] linux基础复习(一) 今天只整理框架,具体内容之后详细整理吧 文件管理 文件基本操作 创建文件和目录 拷贝文件和目录 剪切文件和目录 删 ...

  5. 2021 版 Spring Boot 基础知识复习手册(2w字,建议收藏)

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...

  6. JDBC基础知识复习

    JDBC基础知识复习 1.JDBC连接数据库 1.1.导入JDBC驱动 1.2.注册JDBC驱动程序 1.3.创建连接对象 1.4.关闭JDBC连接 1.5.每种数据库对应的驱动名和URL 2.JDB ...

  7. Linux——Linux C语言编程基础知识

    源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 通常在gcc后跟一些选项和文件名来使用gcc编译器.gcc 命令的基本用法如下:: gcc [option ...

  8. Java基础知识复习(一)

    Java基础知识复习(一) 目录 Java简介 命名规则 八种基本的数据类型 字面量 类型转换 变量的形态 逻辑运算符 位运算 移位运算 习题知识点 目录 Java简介 Java是由Sun公司在199 ...

  9. python编程基础知识点_12个关于Python编程基础知识的总结

    学习任何语言的时候,打好基础非常重要.就像学英文,要知道26个字母,还要学会单词.句型.语法等等.那么Python编程也一样,对于刚入门学习的人更应该打好基础.下面课课家收集了常用的12种Python ...

最新文章

  1. WebService学习总结——调用第三方提供的webService服务
  2. sql backup database备份d盘_SQL数据库备份概述
  3. leetcode —— 2. 两数相加 (对于链表更新的细节)
  4. 一语点破Java中的静态static关键字
  5. 漫画:什么是A*寻路算法?
  6. ApacheCN 翻译活动进度公告 2019.3.3
  7. 毕设不要慌,论文写作法
  8. 在微型计算机中1gb等于多少字节,1GB等于多少字节
  9. 怎样用计算机玩CS,电脑建立局域网玩cs的三种方法
  10. Freeze the Discriminator a Simple Baseline for Fine-Tuning GANs
  11. 做产品也要造概念,讲故事,用优雅的措辞美化自己
  12. java编写一个学生类和教师类_JAVA:1、编写一个学生类,类名为Student,包含如下成员:...
  13. MATLAB中强行终止执行程序的4种方法
  14. python示波器 波形数据_通过示波器数据进行正弦信号参数估计
  15. 掌财社寒山:快乐水不行了 快乐酒就能救可口可乐吗?
  16. 网卡属于计算机网络的传输介质吗,两台电脑通过双绞线和网卡互连算不算计算机网络?...
  17. MATLAB编程实现实验数据的处理
  18. 朗视科技笔试和面试的整理
  19. 柳下挥、六道、鱼人二代入围第四届橙瓜网络文学奖十佳都市大神
  20. 基石为勤能补拙的迷宫之旅——第一天(计算机硬件和操作系统)

热门文章

  1. Spring Security 配置白名单访问后,仍然报错403
  2. 机器学习推荐系统记录
  3. Java面试进阶指北
  4. Docker学习--Docker镜像的管理操作
  5. 2022年,计算机保研er选择计科还是软工?
  6. LDPC码的EXIT图
  7. 什么是运动仿真?浩辰3D制图软件运动仿真应用技巧
  8. 查找java最耗费CPU线程的命令
  9. 科技初创企业遭遇IPO寒冬
  10. 2026年物联网将为运营商带来高收入