【移动计算技术(Android)】期末复习(HITWH)

目录

选择题

选择题知识点汇总

Activity

Intent

Broadcast

BroadcastReceiver

如何自定义Receiver

如何注册接收器

Service

SharedPreferences

三种访问模式

如何创建

如何存储/修改

如何读取

内部存储

openFileOutput

openFileInput

SD卡

资源文件

SQLite

SQLiteOpenHelper(创建数据库)

SQLiteDatabase(进行具体操作)

ContentProvider

URI

如何自定义

ContentResolver

如何创建

如何增删改查

HttpURLConnection

get和post请求的区别

基本操作

MediaPlayer

简答题

简述Android体系结构

*简述Android的四大组件及其功能

简述Android系统特点

*简述Activity的生命周期

简述Activity栈的工作流程

简述Activity生命周期的事件回调函数

简述Android架构的MVC模式

简述如何设置View的宽度

*简述6种常见的页面布局(分别有什么特点)

简述Intent和Bundle的作用

*简述Intent启动Activity的两种启动方式

简述Intent双向传递数据的原理

简述消息广播标识串的用途

*简述Service的类型(两种启动方式的不同)

简述Service的生命周期

简述SharedPreferences及其三种访问模式

简述访问其他应用程序的SharedPreferences必须满足的三个条件

简述Android文件存储的方式

列举一些系统ContentProvider

进程的基本概念

简述Handler消息处理机制

简述TCP/IP网络层次结构

简述什么是socket

简述端口号的作用

简述HttpURLConnection的基本工作流程

简述什么是Fragment及其优点

简述传感器的分类

编程题

补充:toast的使用

基本控件的属性(View)

如何新建菜单

***双向传递数据的核心代码框架

双向传递数据示例(求和)

***双向传递数据+自定义广播示例

系统广播示例(监听拨打电话)

选择题

刷题

【Android】期末选择题和判断题_android判断题_Lotay_天天的博客-CSDN博客

Android期末复习篇_传智课后习题以及答案(选择、填空、判断、简答、编码题)_2、请编写一个数据传递的小程序,要求在第一个界面输入用户名和工作岗位,第二个界_scl、的博客-CSDN博客

Android基础最全题库_android题库_没有谁可以给你想要的生活的博客-CSDN博客

https://www.cnblogs.com/shuzijunofficial/p/14775323.html

Android笔试题大全(持续更新中),android实战项目健身_android笔试题及答案_m0_66264324的博客-CSDN博客

附一份安卓选择题汇总:

链接:https://pan.baidu.com/s/1BinNvd7N_dmKI913sIx4AA?pwd=WHY6 

选择题知识点汇总

Activity

  • 创建菜单的代码:getMenuInflater().inflate(R.menu.main_menu,menu);
  • onCreate()方法在Activity生命周期中只调用一次
  • 七个回调函数:
    • onCreate() Activity启动后第一个被调用的函数,常用来进行Activity的初始化,例如创建View、绑定 数据或恢复信息等。
    • onStart() 当Activity显示在屏幕上时(此刻用户尚不能交互),该函数被调用。
    • onResume() 当用户可以与Activity交互时(此时Activity成为前台程序),被调用。
    • onPause() 当Activity进入暂停状态时(部分遮挡),该函数被调用。主要用来释放CPU资源、保存持久 数据、关闭动画等。
    • onStop() 当Activity对用户不可见后,该函数被调用,Activity进入停止状态。
    • onRestart() 当Activity从停止stop状态进入start状态前,调用该函数。
    • onDestroy() 在Activity被终止前,即进入非活动状态前,该函数被调用。 有两种情况该函数会被调用:(1)当程序主动调用finish()函数;(2)程序被Android系统终结。
  • Log方法示例:Log.d(myTAG, "创建"); (输出调试信息)

Intent

  • 如何创建并启动Intent(显示):
  • 创建:Intent intent = new Intent(A_Activity.this, B_Activity.class);
  • 启动:startActivity(intent);
  • 如何创建并启动Intent(隐示):
  • 创建:Intent intent = new Intent( Intent.ACTION_VIEW,Uri.parse("http://www.163.com") ) (参数:Intent动作,Intent数据)
  • 也可通过setAction添加动作,通过setData添加数据:

        

  • 启动:startActivity(intent);

  • bubble如何存放/获取序列化对象:

  • 双向传递数据时:
  • 如何启动Activity:startActivityForResult ( Intent intent , int requestCode )
    • requestCode的作用:一般是自设的正整数,主要目的用于区别是谁回传的数据
    • 如何回传数据:setResult ( int resultCode, Intent intent )
    • 系统提供了RESULT_OK (-1)、RESULT_CANCELED (0)等常量值作 为resultCode ,没有特殊情况可以直接用RESULT_OK
  • 如何对回传的数据进行处理:onActivityResult

Broadcast

广播发送端,主要进行intent的定义和广播发送

主要步骤:

①创建intent:ntent intent=new Intent("wust.zz.mybroadcast");(自定义广播标识串)

②通过bubble添加数据

③发送广播:sendBroadcast(intent)

BroadcastReceiver

广播接收端,通过receiver和广播过滤接受广播

主要步骤:

①自定义Receiver

②注册接收器

③判断是否接受到了相应的广播,进行处理:

判断逻辑:if(intent.getAction().equals("wust.zz.mybroadcast"))(自定义广播标识)

如何自定义Receiver

  • 自定义MyReceiver,首先继承BroadcastReceiver方法public class MyReceiver extends BroadcastReceiver
  • 重写onReceive方法:public void onReceive(Context context, Intent intent);当Receiver接收到相应的广播时,会触发onReceive事件

如何注册接收器

静态注册

AndroidManifest.xml文件中添加注册信息,用Intent过滤器来设置接收哪种广播

工作流程:当系统广播消息后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否有与发送的广播消息(Intent)相匹配,若匹配则会调用BroadcastReceiver的onReceive()方法

示例中的广播是系统广播

也可以自定义广播:<action android:name="wust.zz.mybroadcast" />;这里就是自定义了广播的标识串

这个标识有三个地方能用到:

①发送广播时:用于创建Intent对象,Intent intent = new Intent("广播标识串");

②manifest中注册时用:作为BroadcastReceiver的intent-filter的action name值

③处理消息时:在onReceive()方法中作为消息类型的判断用

动态注册

IntentFilter filter = new IntentFilter();

filter.addAction("wust.zz.mybroadcast");

动态注册涉及到一个问题,如何将注册的广播添加到BroadcastReceiver中?

BroadcastReceiver receiver = new MyReceiver();

registerReceiver( receiver , filter);

如果需要注销某个广播:

unregisterReceiver(receiver);

Service

自定义Service:public class MyService extends Service

  • onCreate:由startService()触发
  • onStartCommand:服务的主要代码写在onStartCommand()中,不推荐使用onStart()
  • onDestroy:由stopService()或stopSelf()触发
  • 绑定服务:public IBinder onBind(Intent intent)

如何启动/关闭service:

  • startService(intent)
  • stopService(intent)

SharedPreferences

SharedPreferences用于数据的存储和读取

三种访问模式

私有(MODE_PRIVATE):仅有创建程序有权限对其进行读取或写入

全局读(MODE_WORLD_READABLE):不仅创建程序可以对其进行读取或写入,其他应用程序也读取操作的权限,但没有写入操作的权限

全局写(MODE_WORLD_WRITEABLE):创建程序和其他程序都可以对其进行写入操作,但没有读取的权限

可以设置混合访问模式:

public static int MODE = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;

全局读+全局写

如何创建

通过getSharedPreferences方法创建

SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME, MODE);

如何存储/修改

通过SharedPreferences.Editor类对SharedPreferences进行修改;通过commit()函数保存修改的内容:


数据存储目录:SharedPreferences文件保存在/data/data/<package name>/shared_prefs目录下

如何读取

内部存储

文件保存的路径:/data/data/<package name>/files目录下

openFileOutput:写文件

openFileInput:读文件

openFileOutput

openFileOutput()函数为写入数据做准备而打开的应用程序文件,如果指定的文件不存在,则创建一个新的文件

四种文件操作模式:

模式

说明

MODE_PRIVATE

私有模式,缺陷模式,文件仅能够被文件创建程序访问,或具有相同UID的程序访问。

MODE_APPEND

追加模式,如果文件已经存在,则在文件的结尾处添加新数据。

MODE_WORLD_READABLE

全局读模式,允许任何程序读取私有文件。

MODE_WORLD_WRITEABLE

全局写模式,允许任何程序写入私有文件。

示例:

第1行代码定义了建立文件的名称fileDemo.txt

第2行代码使用openFileOutput()函数以私有模式建立文件

第4行代码调用write()函数将数据写入文件

第5行代码调用flush()函数将所有剩余的数据写入文件

第6行代码调用close()函数关闭FileOutputStream

为了提高文件系统的性能,一般调用write()函数时,如果写入的数据量较小,系统会把数据保存在数据缓冲区中,等数据量累积到一定程度时再一次性的写入文件中;由上可知,在调用close()函数关闭文件前,务必要调用flush()函数,将缓冲区内所有的数据写入文件

openFileInput

openFileInput()函数为读取数据做准备而打开应用程序私文件

SD卡

文件存储在/sdcard目录下

资源文件

  • 原始格式文件可以是任何格式的文件,例如视频格式文件、音频格式文件、图像文件和数据文件等等,存放在/res/raw目录下;
  • 读取原始格式文件,首先需要调用getResource()函数获得资源对象,然后通过调用资源对象的openRawResource()函数,以二进制流的形式打开指定的原始格式文件。在读取文件结束后,调用close()函数关闭文件流
  • XML文件,一般用来保存格式化的数据,存放在/res/xml目录下
  • 读取XML格式文件,首先通过调用资源对象的getXml()函数,获取到XML解析器XmlPullParser

SQLite

SQLiteOpenHelper(创建数据库)

常用方法:

  1. 创建 or 打开 可读/写的数据库(通过 返回的SQLiteDatabase对象 进行操作)getWritableDatabase()
  2. 创建 or 打开 可读的数据库(通过 返回的SQLiteDatabase对象 进行操作)getReadableDatabase()
  3. 数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase()时调用(在继承 SQLiteOpenHelper类的子类中复写)onCreate(SQLiteDatabase db)
  4. 数据库升级时自动调用(在继承SQLiteOpenHelper类的子类中复写)
    onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
  5. 关闭数据库 close()

SQLiteDatabase(进行具体操作)

SQLiteDatabase db

  1. db.execSQL():执行具体的sql语句
  2. db.close():关闭数据库

静态方法:

  1. SQLiteDatabase.openOrCreateDatabase():打开或创建数据库
  2. SQLiteDatabase.deleteDatabase():删除数据库

ContentProvider

ContentProvider和ContentResolver之间是一对多的关系,一个ContentProvider可以提供多个数据集,可为多个ContentResolver服务

URI

统一资源标识符,用于标识资源的位置;

URI的格式:

需要记住,URI的固定前缀,是content://

如何自定义

ContentResolver

如何创建

ContentResolver resolver = getContentResolver();

如何增删改查

resolver.query()、insert()、update()、delete()

HttpURLConnection

get和post请求的区别

get的数据是在HTTP的头部传送的,而post的数据则是在HTTP请求的内容里传送。

简单的说:post传输数据时,不需要在URL中显示出来,而get方 法要在URL中显示

基本操作

  • 创建url对象:URL url = new URL(httpUrl);(httpUrl是自定义的网址)
  • 创建HttpURLConnection对象:HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
  • 设置请求方式(默认get):httpURLConnection.setRequestMethod("GET");
  • 建立连接:httpURLConnection.connect();
  • 获取请求状态码: httpURLConnection.getResponseCode();

MediaPlayer

prepare():完成视频播放前的准备工作

setDataSource():设置多媒体数据来源

如何创建:

MediaPlayer mediaPlayer = new MediaPlayer();

MediaPlayer mediaPlayer = MediaPlayer.create();

简答题

简述Android体系结构

  • 应用程序层:包括各类与用户直接交互的应用程序,或由java语言编写的运行于后台的服务程序;例如:SMS短信,电话拨号,图片浏览器,日历,游戏, 地图,web浏览器等程序,以及开发人员开发的其他应用 程序
  • 应用程序框架层:

  • 系统运行库层:
    • 程序库:C库、媒体库、Surface Manager、WebKit、SGL、3Dlibraries、FreeType、SSL、SQLite
    • Android 运行库:每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例

关于JVM和Dalvik VM:

JVM:执行class文件(字节码 )

Dalvik VM:执行dex文件(Dalvik Executes缩写)

Dalvik最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备

  • Linux 内核层:Android的核心系统服务依赖于Linux内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型

*简述Android的四大组件及其功能

①Activity:用于界面展示与用户交互

②Service:Service是Android系统四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序,用于执行后台任务

③BroadcastReceiver:对发送出来的Broadcast进行过滤并响应,用于传递/通知某种事件

④ContentProvider:提供了应用程序之间共享数据的方法,一个应用程序可以通过ContentProvider将自己的数据暴露出去;应用程序通过ContentProvider访问数据而不需要关心数据具体的存储及访问过程,这样既提高了数据的访问效率,同时也保护了数据

简述Android系统特点

在内存和进程管理方面,Android有自己的运行时和虚拟机;

Android将界面设计与程序逻辑分离,界面布局使用XML文件,有利于界面的修改和维护;

Android提供轻量级的进程间通讯机制Intent,使跨进程组件通信和发送系统广播成为可能

Android提供Service作为无用户界面、长时间后台运行组件;

支持快速、高效的数据存储

为了跨进程共享数据,Android提供ContentProvider接口

可以无需了解数据源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作

*简述Activity的生命周期

答案1:Activity生命周期指Activity从启动到销毁的过程

Activity表现为四种状态:

  1. 活动状态Active:Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互。
  2. 暂停状态Pause:Activity在界面上被部分遮挡,不再处于用户界面的最上层,且不能够与用户进行交互。(如弹出选择框时)
  3. 停止状态Stop:Activity被其他Activity全部遮挡,界面完全不能被用户看到。(如玩游戏时来电了)
  4. 非活动状态Dead:Activity没有启动或者被finish()。

答案2:

onCreate():创建活动,做一些数据初始化的操作

onStart():由不可见变为可见

onResume():可以与用户进行交互,位于栈顶

onPause():暂停,启动或恢复另一个活动时调用

onStop():停止,变为不可见

onRestart():由停止状态变为运行状态

onDestroy():销毁

简述Activity栈的工作流程

  1. Activity栈后进先出
  2. 新的Activity启动之后入栈,处于活动状态,如果按了返回键或者Activity被finish,则该Activity出栈,位于非活动状态;
  3. 位于栈底的暂停状态或者停止状态的Activity被系统强制终止后也会出栈,变为非活动状态

简述Activity生命周期的事件回调函数

简述Android架构的MVC模式

MVC目的:M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,C可确保M和V的同步,一旦M改变,V能同步更新

简述如何设置View的宽度

①通过wrap_content设置:自适应内容,表示和自身内容一样的长度

②通过match_parent(fill_parent)设置,表示和父组件一样的长度

③设置具体的宽度:android:layout_width="xxdp"

④在代码中通过setLayoutParams来设置

*简述6种常见的页面布局(分别有什么特点)

RelativeLayout

相对布局是一种非常灵活的布局方式;

通过指定界面元素与其他元素的相对位置关系,来确定界面中所有元素的布局位置;

优点:能够最大程度保证在各种屏幕尺寸的手机上正确显示界面布局


常用布局:

居中:

margin(设置组件与父容器的间距):

padding(设置组件内部元素间的间距):

*LinearLayout

线性布局是常用的一种布局方式,支持横向和纵向排列子视图

通过设置android:orientation来确定是垂直还是水平布局

android:orientation="vertical" 垂直布局(垂直布局时:每行仅包含一个界面元素)

android:orientation="horizontal" 水平布局 (默认)(水平布局时:所有界面元素都在一行)

FrameLayout

FrameLayout中所有界面对象都是从屏幕的左上角(0,0)开始布局,不能指定位置;

多个组件层叠排列,上一层的会覆盖下一层的控件;

第一个添加的组件放到最底层,最后添加的显示在最上面

TableLayout

表格布局以行列的形式管理子元素,每一行是一个TableRow布局对象,当然也可以是普通的View对象;TableRow表现为一个水平LinearLayout,里面的元素会水平排列

GridLayout

Android4.0新支持的布局

网格布局将用户界面划分为网格,可以方便地实现等分、不等分的布局;界面元素可随意摆放在网格中,网格布局比表格布局更灵活;

在网格布局中界面元素可以占用多个网格

AbsoluteLayout

绝对布局能通过指定界面元素的坐标位置,来确定用户界面的整体布局。已经不推荐使用

绝对布局不能够根据不同屏幕对界面元素进行位置调整

简述Intent和Bundle的作用

Intent是一种组件之间消息传递机制,它是一个动作的完整描述:包含了动作产生组件、接收组件和传递的数据信息;Intent主要用途有启动Activity、Service,在Android系统上发布Broadcast消息

Bundle类是一个存储和管理key-value值对的类,多应用于Activity之间相互传递值

*简述Intent启动Activity的两种启动方式

显示启动

在Intent中指明要启动的Activity类

代码示例:

隐式启动

无需指明具体启动哪一个Activity,而由Android系统根据Intent的动作和数据来决定启动哪一个Activity

代码示例:

简述Intent双向传递数据的原理

简述消息广播标识串的用途

  1. 发送广播时:用于创建Intent对象,Intent intent = new Intent("广播标识串");
  2. manifest中注册时用:作为BroadcastReceiver的intent-filter的action name值
  3. 处理消息时:在onReceive()方法中作为消息类型的判断用

*简述Service的类型(两种启动方式的不同)

简述Service的生命周期

在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用 onStartCommand()方法。如果调用startService()方法前服务已经被创建,多次调startService() 方法并不会导致多次创建服务,但会导致多次调onStartCommand() 方法。

如果调用方法前服务已经被绑定,多次调用bindService()并不会导致多次创建服务及绑定(也就是 onCreate()和onBind()方法并不会被多次调用)。

简述SharedPreferences及其三种访问模式

SharedPreferences是一种轻量级的数据保存方式

通过SharedPreferences可以将NVP(Name/Value Pair,名称/值对)保存在Android的文件系统中,而且SharedPreferences完全屏蔽对文件系统的操作过程;SharedPreferences不仅能够保存数据,还能够实现不同应用程序间的数据共享

SharedPreferences支持三种访问模式

  1. 私有(MODE_PRIVATE):仅有创建程序有权限对其进行读取或写入。
  2. 全局读(MODE_WORLD_READABLE):不仅创建程序可以对其进行读取或写入,其他应用程序也读取操作的权限,但没有写入操作的权限。
  3. 全局写(MODE_WORLD_WRITEABLE):创建程序和其他程序都可以对其进行写入操作,但没有读取的权限。

简述访问其他应用程序的SharedPreferences必须满足的三个条件

  1. 共享者需要将SharedPreferences的访问模式设置为全局读或全局写
  2. 访问者需要知道共享者的包名称和SharedPreferences的名称,以通过Context获得SharedPreferences对象
  3. 访问者需要确切知道每个数据的名称和数据类型,用以正确读取数据

简述Android文件存储的方式

Android使用的是基于Linux的文件系统

  1. 内部存储:在内部存储器上进行文件写入和读取
  2. 外部存储:在SD卡上进行存储;SD卡使用的是FAT(File Allocation Table)的文件系统,不支持访问模式和权限控制,但可以通过Linux文件系统的文件访问权限的控制保证文件的私密性
  3. 资源文件:程序开发人员可以将程序开发阶段已经准备好的原始格式文件和XML文件分别存放在/res/raw和/res/xml目录下,供应用程序在运行时进行访问

原始格式文件可以是任何格式的文件,例如视频格式文件、音频格式文件、图像文件和数据文件等等,在应用程序编译和打包时,/res/raw目录下的所有文件都会保留原有格式不变

/res/xml目录下的XML文件,一般用来保存格式化的数据,在应用程序编译和打包时会将XML文件转换为高效的二进制格式,应用程序运行时会以特殊的方式进行访问

列举一些系统ContentProvider

进程的基本概念

简述Handler消息处理机制

  1. 不直接在子线程中进行 UI 操作,子线程通过 Handler 将Message 传送出去
  2. 主线程中的Handler接收这个Message,然后进行 UI 等相关操作

简述TCP/IP网络层次结构

简述什么是socket

网络上的两个应用程序之间的通信是分层进行的,socket是应用程序进行网络通信的接口

简述端口号的作用

如果要发起网络连接,不仅需要知道远程机器的地址或名字。而且,还需要一个端口号。客户端和服务器必须事先约定所使用的端口,如果系统两部分所使用的端口不一致,那就不能进行通信

简述HttpURLConnection的基本工作流程

get:

post:

简述什么是Fragment及其优点

Fragment(碎片)是一种可以嵌入在Activity中的 UI 片段,它能让程序更加合理和充分地利用屏幕空间

优点:

Fragment可以轻松地创建动态灵活的UI设计,可以适应不同的屏幕尺寸,从手机到平板电脑

Fragment可将Activity分离成多个可重用的组件,每个都有它自己的生命周期和UI

Fragment是一个独立的模块,紧紧地与Activity绑定在一起。可以在运行中动态地移除、加入、替换等。

Fragment 替代TabActivity做导航,性能更好

Fragment 在4.2版本中新增嵌套fragment方法,能够生成更好的界面 效果

Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局 放到一个Activity里面,现在可以用多个Fragment来代替,只有在需要的时候才加载Fragment,提高性能

简述传感器的分类

编程题

补充:toast的使用

Toast 在应用程序上浮动显示少量信息给用户,它永远不会获得焦点,不影响用户的输入等操作

基本用法:

Toast toast=Toast.makeText( 参数1,参数2,参数3 );

toast.show();

参数1:当前的上下文环境;getApplicationContext()或者是某个Activity.this

参数2:要显示的字符串

参数3:显示时间的长短:Toast.LENGTH_SHORT或 Toast.LENGTH_LONG

基本控件的属性(View)

(有可能就是给出一个页面,填写如何设置控件的属性来实现这个页面)

如何新建菜单

菜单资源示例:

这里的名称和创建时的名称对应,上面是main.xml,这里就得是R.menu.main

同样,这里的R.id.menu_item1应该为R.id.menu1(我是从不同的代码拼接的,注意区分)

***双向传递数据的核心代码框架

A端收到回传的数据:

双向传递数据示例(求和)

***双向传递数据+自定义广播示例

系统广播示例(监听拨打电话)

(如何添加广播的代码要会)

(这一部分代码也要会,记住如何startActivity)

猜你喜欢

转载自blog.csdn.net/qq_51235856/article/details/130945412