Android必知必会 简答题

时间:2024-03-17 14:23:53

问题:Android开发环境(Android Studio)需安装什么?

Java JDK:Java开发环境,需配置环境变量;

Android Studio:Android Studio 是开发 Android 应用程序的官方 IDE,基于 Intellij IDEA;

Android SDK:对应版本的Android软件开发包;

 

问题:Android四大组件是什么?

Activity:用户可视化界面;

Service:后台运行服务,不提供界面呈现;

Broadcast Receive:接收广播;

Content Provider:支持多个应用中存储和读取数据;

 

问题:res文件夹的作用是什么?其有什么特殊性。

  • res文件夹可存放项目的资源文件夹。如图片、文本等。
  • res文件夹下的所有资源,都会在R.java文件下生成对应的资源ID(32位二进制)。

如:public static final int del=0x7f020002;

  • 项目中对资源的访问,都需通过资源ID来完成。

问题:举例res文件夹中常见的资源文件夹

res/values/

存放值文件。可被编译成很多种类型的XML文件。如:

array.xml     定义数组资源

colors.xml   定义颜色资源

dimens.xml 定义尺寸资源。

strings.xml  定义字符串资源

 

问题:新建Activity时,默认会新建哪2个文件?作用是什么?

布局文件:activity_main.xml,决定界面显示效果

Java文件: MainActivity.java, 实现逻辑功能

 

问题:在布局文件中表示资源ID的方式是?

基本格式为:属性=“@****/*****”

android:drawableTop="@drawable/tab_menu_channel" 

android:textColor="@color/tab_menu_text" 

 

问题:在java文件中表示资源ID的方式是?

基本格式:R.*****.******(R.资源类型.资源名)

setContentView(R.layout.activity_main); 

 

xml文件和java文件是怎么关联的?

setContentView(R.layout.activity_main); 

 

问题:描述在布局文件中标记一个控件的基本方法?

  1. 输入<,后接控件的标记名称;

添加属性对控件进行修饰;例:TextView控件的标记方法

 

问题:描述在布局文件中标记一个控件的基本方法?

一般控件由/>结尾;容器由</容器标记>结尾。

 

问题:如何设置View的宽度和高度?

设置宽度(Width)和高度(Height);常用属性值:

wrap_content自适应内容;

match_parent匹配父容器;和父容器一样。

 

问题:如何给控件添加ID的别名?

android:id="@+id/submit" 

 

如何在java文件中初始化控件?

先声明对象的类型和名字;

findViewByID方法初始化对象;参数:R.id.布局文件中标记的别名;

左右类型不匹配,使用Alt+Enter修复错误,添加强制转换;

新版本可不用再写强制转换;

 

请列举一些TextView控件的常用属性。

android:text设置显示的文本内容

android:textSize设置字体大小

android:textColor设置字体颜色

android:background设置背景颜色

 

描述单选按钮(RadioButton)的使用方法

 

问题:描述ListView和Spinner的基本使用方法。

列表ListView控件和下拉列表Spinner控件和普通的UI控件最主要的区别在于,其数据需要通过静态或动态的方式绑定到控件上之后方可使用。

静态方式:在布局文件中设置数据来源。

动态方式:在java文件中设置数据来源。

 

问题:描述ListView和Spinner的基本使用方法。

静态方式:

  1. res/values文件夹中新建array.xml文件,用以存放所需的数组。
  2. array.xml文件中,新建数组,并添加所需的数据项。
  3. Spinner的entries属性中设置数据源。

 

问题:描述ListView和Spinner的基本使用方法。

动态方式:

  1. 初始化控件对象;
  2. java文件中准备所需要的数据,如:字符串数组、List;
  3. 初始化适配器(Adapter);
  4. 在对象上绑定适配器;

 

问题:描述gravity和layout_gravity的区别。

layout_gravity设置当前控件在父容器中的对齐效果

gravity设置当前控件中的内容的对齐效果

 

问题:描述padding和margin的区别。

padding设置内边距

margin设置外边距

 

问题:例举集中常用的布局,并描述其效果。

  1. 线性布局:LinearLayout

线性布局具有垂直方向与水平方向的布局方式

通过设置属性“android:orientation”控制方向,属性值垂直(vertical)和水平(horizontal),默认水平方向。

 

问题:例举集中常用的布局,并描述其效果。

  1. 表格布局:TableLayout

表格布局,适用于多行多列的布局格式,每个TableLayout是由多个TableRow组成,一个TableRow就表示TableLayout中的每一行,这一行可以由多个子元素组成。

 

问题:例举集中常用的布局,并描述其效果。

  1. 帧布局:FrameLayout

最简单的一种布局,从屏幕左上角按照层次堆叠方式布局,后面的控件覆盖前面的控件。没有任何的定位方式。

在只需要一个容器进行填充时,较为常用。

 

问题:例举集中常用的布局,并描述其效果。

  1. 相对布局:RelativeLayout

相对布局可以让子控件相对于兄弟控件或父控件进行布局,可以设置子控件相对于兄弟控件或父控件进行上下左右对齐。

当布局嵌套过多时,可使用此布局。

 

问题:如何在布局文件中修改TextView的显示文本?

TextView控件中寻找合适的属性,以达到需要的目的:

android:text表示显示的文本内容

 

问题:如何在java文件中修改TextView的显示文本?

根据布局文件中所需的属性,寻找对应的java方法。

修改显示的文本对应属性:android:text,其对应方法为setText();

 

问题:如何在java文件中让RadioGroup在界面中不可见?

  1. 在布局文件中,找到可实现不可见的属性;
  2. 找到其对应的java方法;
  3. 根据方法的说明完成调用;

 

问题:如何在java文件中让RadioGroup在界面中不可见?

radioGroup.setVisibility(View.INVISIBLE); 

 

问题:描述使用匿名内部类的方式实现按钮单击事件的过程?

  1. 初始化按钮控件;
  2. 按钮控件调用setOn*****Listener()方法实现单击事件;

 

问题:什么是Activity?

  • Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互。
  • Activity用于显示用户界面,用户通过Activity交互完成相关操作 , 一个App允许有多个Activity。

 

问题:什么是Activity的生命周期?

表示一个Activity从开始运行到最后销毁的过程。

 

问题:Activity的生命周期共有几种状态?

共有4种状态,如下所示:

  1. Resumed(运行状态):Activity处于前台,且用户可以与其交互。此时Activity位于返回栈的栈顶。
  2. Paused(暂停状态): Activity被在前台中处于半透明状态或者未覆盖全屏的其他Activity部分遮挡。 暂停的Activity不会接收用户输入,也无法执行任何代码。 
  3. Stopped(停止状态):Activity被完全隐藏,且对用户不可见;被视为后台Activity。 停止的Activity实例及其诸如成员变量等所有状态信息将保留,但它无法执行任何代码。
  4. Destroy(销毁状态):当一个Activity从返回栈中移除后就变成了销毁状态。 

 

问题:什么堆栈?

堆栈是一种后进先出(LIFO)的数据结构。

LIFO:Last In First Out 后进先出

 

问题:什么是Android返回栈?

每当启动一个新的Activity时,它会被放入返回栈中,并处于栈顶的位置。每当我们按下Back键或调用activity的finish()方法去销毁一个活动时,处于栈顶的Activity会出栈,这时前一个入栈的Activity就会重新处于栈顶的位置。系统总是会显示处于栈顶的Activity给用户。

 

问题:Activity有几种回调方法,各是什么?

共有7种回调方法。

  1. onCreate():这个方法在每一个Activity类都会有,当新建一个Activity类时,一定会重写父类的onCreate方法,onCreate方法会在Activity第一次被创建时调用。应该在这个方法中完成Activity的初始化操作,比如说加载布局,初始化布局控件,绑定按钮事件等。
  2. onStart():这个方法在OnCreate()方法之后调用,或在Activity由不可见变为可见时调用。
  3. onResume():在Activity准备好和用户交互的时候调用。
  4. onPause():在系统准备去启动或者恢复另一个Activity的时候调用。
  5. onStop():在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
  6. onDestory():在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
  7. onRestart():在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。

 

问题:如何启动新的Activity?

Activity与Activity中相互通信,即为Android的组件间的相互通信,必须通过Intent对象完成。

  1. 初始化Intent对象,设置当前界面和需启动的界面;
  2. 通过StartActivity方法启动界面;

 

问题:如何获得目标界面跳转回当前页面的返回结果?

  1. startActivity( ):仅仅是跳转到目标页面,若是想跳回当前页面,则必须再次调用startActivity( )。
  2. startActivityForResult( ) :当使用此方法从Activity_A跳转到Activity_B,当Activity_B调用了finish()方法以后,程序会自动跳转回Activity_A,并调用Activity_A中的onActivityResult( )方法。

具体调用顺序如下:

  1. Activity_A跳转到Activity_B时采用startActivityForResult(intent, 0);
  2. Activity_A中重写onActivityResult方法,用来接收处理Activity_B回传的数据。
  3. Activity_B中回传数据时采用setResult方法,并且之后调用finish方法。(调用setResult()方法必须在finish()之前)

 

resultCode常用两个常量:RESULT_CANCELED  和 RESULT_OK

 

问题:列举几种常见的消息输出方式?

Toast类:以短小信息的形式通知给用户,在一段时间之后会自动消失。

Log类:Android Studio中的日志工具类。Log可以通过过滤器来进行筛选,方便用户查看。

Log.v():打印一些最为繁琐、意义不大的日志信息。

Log.d():打印一些调试信息(输入小技巧:logd+Tab)

Log.i():打印一些比较重要的数据,可分析用户行为数据(输入小技巧:logi+Tab)

Log.w():打印一些警告信息,提示程序该处可能存在的风险(输入小技巧:logw+Tab)

Log.e():打印程序中的错误信息(输入小技巧: loge+Tab)

Log中Tag标签输入小技巧:

反复输入Tag标签很麻烦,可在OnCreate()方法外输入:logt+Tab,添加Tag常量。

 

问题:SharedPreferences 的数据存储形式是什么?数据存在哪儿?

key-value pairs

primitive data: booleans, floats, ints, longs, and strings.

Xml文件的形式,存放在data/data/包名/shared_prefs

 

问题:SharedPreferences 的使用过程?

To get a SharedPreferences object for your application, use one of two methods:

  1. getSharedPreferences()
  2. getPreferences()

 

问题:Android文件存储包括哪两种?

  1. 内部文件存储
  2. 外部文件存储

 

问题:内部文件存储的主要过程?

一、写操作:

1)通过openFileOutput方法(需给出文件名及操作模式),初始化FileOutputStream;;

2)使用write()方法,以字节的方式写入数据;

3)清除缓存;flush();

4)关闭输出流;close();

 

问题:Android文件存储包括哪两种?

  1. 内部文件存储
  2. 外部文件存储

 

问题:内部文件存储的主要过程?

一、写操作:

1)通过openFileOutput方法(需给出文件名及操作模式),初始化FileOutputStream;;

2)使用write()方法,以字节的方式写入数据;

3)清除缓存;flush();

4)关闭输出流;close();

 

1)通过openFileInput方法(需给出文件名),初始化FileInputStream;

2)使用read()方法,以字节的方式读数据;

3)关闭输入流;close();

 

问题:提供操作SQLite数据库API的类是什么?其具有什么方法?

SQLiteDatabase类,相关方法包括:

1)onCreate(SQLiteDatabase db)创建数据库时调用

2)onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)版本更新时调用

3)getReadableDatabase()创建或打开一个可读写数据库

4)getWritableDatabase()创建或打开一个可读写数据库

区别:

getReadableDatabase()方法中会调用getWritableDatabase()方法

如数据库的磁盘空间满了, getWritableDatabase()方法会打开失败,而getReadableDatabase() 打开失败后会尝试以只读方式打开数据库

 

问题:Cursor类是什么类,有哪些差用方法?

Cursor类为游标类,可以认为是数据集。

moveTo***** ()移动指针的相关方法;

get*****(int i)返回第几列的***类型的数据;

getCount()返回记录的数量;

getColumnCount()返回共几列;

getColumnIndex(String s)根据列名返回第几列;

 

问题:操作SQLite数据库的过程是什么?

1)自定义类,继承SQLiteOpenHelper类;并重写onCreate()和onUpdate()方法、构造方法;

SQLiteOpenHelper为SQLiteDatabase的辅助类。

2)使用execSQL()方法,直接执行无需返回值的SQL语句完成操作。

3)用query()或rawQuery()方法执行查询语句。结果记录在Cursor对象中。

4)通过Cursor对象来对游标进行操作,以获取需要的数据

 

问题:SQLite数据库存放路径?

data/data/包名/database

问题:调试SQLite数据库可用什么工具?

可用SDK目录下platform-tools中的sqlite3.exe

cmd的命令行提示符下,使用adb shell可以快速进入模拟器的文件系统进行调试。中文乱码,在cmd下输入:chcp 65001  

 

广播分为哪些类型?

标准广播:完全异步执行的广播,所有广播接收器都会收到该广播消息,无法终止广播。

有序广播:同步执行的广播,根据广播接收器的优先级的先后顺序来接收广播消息。只有这个广播接收器的逻辑执行完成后才可以继续传递广播。

 

广播的发送步骤?

1、创建Intent对象。

2、向Intent对象中添加执行的动作、传递的数据等信息。

3、调用相应的方法发送Intent。

sendBroadcast() 发送普通广播

sendOrderedBroadcast() 发送有序广播

 

广播的接收步骤?

1、创建广播接收器类BroadcastReceiver,并重写OnReceive()方法。

2、在Android系统中注册广播接收器,分为静态和动态两种注册方式。

 

静态注册:

AndroidManifest文件中进行注册

<Application>节点中添加标签<Receiver>,并设置过滤器<intent-filter>

添加感兴趣的广播的<action>

注:注册广播时,可能需要添加权限

 

动态注册:

Java文件中指定广播地址并进行注册。

1、定义Intent-Filter对象。

2、调用Context.registerReceiver()方法进行注册。

取消注册:Context.unregisterReceiver()方法。

动态注册需要App启动后才可以接收广播,静态的不用启动亦可接收。