移动应用开发期末复习
第一章——开启Android之旅
第二章—布局
第三章—控件
第四章—Activity
第五章—数据存储
第六章—BroadcastReceiver
第七章—Service
1.Dalvik虚拟机是基于( 寄存器 )的架构。
2.Android系统采用分层架构,由高至低分别为:( 应用程序 )、( 应用程序框架)、( 核心类库 )和( Linux内核)。
3.在Android智能终端中,有许多应用,如拍照,管理联系人等,它们都属于(应用程序)层。
4.Android的分层框架中,应用框架层使用(Java)语言或Kotlin语言开发,核心类库使用(C/C++)语言开发。
5.Android操作系统的主要特点(ABC)。
A、与Google无缝结合
B、实现个性化应用
C、良好的平台开放性
D、软件均要消费
6.Android操作系统的手机可以有以下几个方法进行软件安装(ABCD)。
A、通过手机直接登录百度网站下载安装
B、通过手机直接登录Android门户网站进行下载安装
C、通过数据线与电脑连接直接下载安装
D、通过PC终端上网下载至SD卡里再插入手机进行安装
1.创建程序时,填写的Package Name表示( 项目的包名 )。
2.创建程序时,填写的Project Name表示( 项目名称 )。
3.创建程序时,填写的Application Name表示(应用名称)。
1.Android中有许多控件,这些控件都继承自(View)类。
2.在底部导航栏布局文件中,使用(ImageView)控件显示底部按钮的图片部分。
3.在“我”的界面中,有三条灰色的分割线是用(View)控件实现的。
4.在设置界面逻辑代码中,设置(修改密码)的点击事件,实现当点击修改密码时跳转到修改密码界面。
5.在注册界面的布局文件中,通过(<include>)标签将main_title_bar.xml(标题栏)引入
6.下列代码中,用于将TextView设置为隐藏状态的是(android:visibility=“gone”)。
7.创建ListView的布局界面必须通过(android:id)属性才能使数据显示在界面上。
8.(EditText)件可以输入文字,且可以通过inputType属性控制输入的内容只能是数字或者字母等。
9.在登录界面中使用(TextView)控件用于显示文字“立即注册”和“找回密码?”。
10.在注册界面逻辑中,通过输入的用户名查询(SharedPreferences)中是否已经存在该用户。
11.android:visibility="gone"属性用于设置控件为(隐藏)状态。
12.使用ListView显示较为复杂的数据时最好用ArrayAdapter适配器。( ❌)
13.在登录界面逻辑代码中,调用et_user_name控件的setSelection()方法来设置光标位置。(✔️)
14.在登录逻辑代码中,调用startActivity()方法跳转到注册界面,目的是从注册界面回传数据到登录界面。(❌)
15.监听EditText控件的输入文字需要在onTextChanged()方法中监听EditText的输入状态。(✔️)
16.在个人资料修改页面标题栏右上角的“保存”的文本框默认是显示状态。(❌)
2.**startActivityForResult()**方法接收两个参数,第一个是Intent,第二个是(C)
3.Activity的4种启动模式是(standard)、(singleTop)、(singleTask)、(singleInstance)。
4.Android中Intent寻找目标组件的方式分为两种,分别是显式Intent和隐式Intent。
5.Activity中AndoidManifest.xml中注册时的节点名称为****(✔️)
6.Android的4大组件是activity、service、content provider、broadcast receiver。(✔️)
7.Activity默认的启动模式是singleTop模式。(❌)
8.Intent一般只用于启动Activity不能开启广播和服务。(❌)
9.请写出Activity生命周期中,哪些方法是Activity处于活动状态时的?
我的答案:
onResume()、onPause()
10.现有两个界面ActivityA和ActivityB,欲完成从ActivityA到ActivityB的跳转,请简述使用Intent完成此跳转的过程。
我的答案:
Intent i = new Intent(ActivityA.this,ActivityB.class);
startActivity(i);
1.下列代码中,关于文件存储数据的说法错误的是(D)。
2.使用SQLite数据库进行查询后,必须要做的操作是(D)。
3.Android中的数据存储方式主要有5种,分别是文件存储、SharedPreferences、SQLite、ContentProvider和网络存储。
4.SharedPreference是一个轻量级的存储类,主要用于存储一些应用程序的(配置信息)。
5.使用SharedPreferences存储数据时,有2种操作模式,一种是私有方式存储(MODE_PRIVATE),另一种是追加方式存储(MODE_APPEND)
6.SQLite中可存储的数据类型有null、integer、real、(text)和Blob。
7.使用SharedPreferences存储文件时,只能采用私有方式存储,不能使用别的方式存储。(❌)
8.文件存储是通过I/O流的形式把数据原封不动的存储到文档中。(❌)
9.SQLite只支持NULL、INTEGER、REAL、TEXT和BLOB等5种数据类型。(✔️)
10.SQLite数据库使用完后不需要关闭,不影响程序性能。(❌)
11.SQLite既支持Android的API又支持SQL语句进行增、删、改、查操作。(✔️)
12.请简要说明SQLite数据库创建的过程。
我的答案:
首先创建一个类继承SQLiteOpenHelper,重写onCreate()方法并在该方法中创建表,使用创建出的SQLiteOpenHelper的子类对象的==getReadableDatabase()==方法获得一个可读写的数据库对象。
1.关于有序广播和无序广播说法不正确的是(C)。
广播:发布者、接受者;
有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。此时的广播接收器是有先后顺序,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。想要拦截一条广播不往下发送,可以使用abortBroadcast****()
无序广播是一种完全异步执行的广播,在广播发出~去之后,所有的广播接收器几乎同时接收到这条广播消息,它们之间没有任何项目顺序可言。这种广播的效率比较高,但也意味着它是无法被截断的。
2.广播接收者按照级别来分,可以分为系统广播和自定义广播。(✔️)
3.有序广播和无序广播都可以被拦截。(❌)==>例如:拼多多的垃圾信息
4.每个广播只能使用一个广播接收者接收。(❌)==>例如:拼多多的垃圾信息群发
5.广播接收者发送的广播是无序的,不存在有序的情况。(❌)
6.接收系统短消息广播时,在注册广播接收者时,设置action的值为:android.provider.Telephony.SMS_RECEIVE。(❌)==>正确答案:android.provider.Telephony.SMS_RECEIVED
7.如果两个广播接收者的优先级相同,则先注册的广播接收者优先接收到消息。(✔️)
8.注册广播(了解)
我的答案:
1.绑定服务时,必须要实现服务的**onBind()**方法。
2.当客户端与服务器端建立连接后,向服务器端发送的请求,被称为HTTP请求。
3.在进行远程服务通信时,需要使用AIDL接口。
4.启动服务有两种方法,分别是**startService()方法和bindService()**方法。
在安卓里面,大家注意:有的是以界面方式来呈现出来,有的是不可呈现的方式。
服务(Service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。
不过需要注意的是,服务并不是运行在一个独立的进程当中的,而是依赖于创建服务时所在的应用程序进程。与某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止运行。另外.也不要被服务的后台概念所迷惑,实际上服务并不会自动开启线程,所有的代码都是默认运行在主线程当中的。也就是说,我们需要在服务的内部手动创建子线程,并在这里执行具体的任务,否则就有可能出现主线程被阻塞住的情况。
- service用于在后台完成用户指定的操作。service分为两种:
started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。
bbound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。
- startService()与bindService()区别:
- started service(启动服务)是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁,就是启动组件和服务是分离状态。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。
- 使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
5.所有创建的服务类都只能继承Service。(❌)
6.通过IntentService的继承类实现命令触发的服务,也可以直接通过Service的继承类来实现。(✔️)
7.现已完成以startService()方式启动服务的功能,并使用LogCat并服务中涉及到生命周期中的方法名均已输出打印。试问:
当点击图中“START方式启动服务”时,会输出服务中哪些生命周期中的方法?
当再次点击“START方式启动服务”时,又会输出哪些与生命周期相关的方法?
当点击“START方式停止服务”时,会输出服务中哪些与生命周期相关的方法?
需要注意的有:
如果是调用者直接退出而没有调用stopService的话,那么被启动的Service会一直在后台运行,直至它的stopService方法被调用,或者它自己调用stopSelf方法。
在服务未被创建时,系统会先调用服务的onCreate方法,接着调用onStartCommand方法。如果调用startService方法前服务已经被创建,那么会再次调用onStartCommand方法。并且,不管调用了多少次onStartCommand方法,只需要一次stop便可以将相应的service关闭。
8.说明本地服务通信的过程。
我的答案:
在使用服务进行本地通信时,首先需要创建一个Service类,该类会提供一个onBind()方法,返回值是一个IBinder对象,IBinder对象会作为参数传递给ServiceConnection类中onServiceConnected()方法,这样访问者就可以通过IBinder对象与Service进行通信。