第1章

1.Android平台具有哪些特点?

答:Android平台特点主要包括:开放性、不再受营运商限制、丰富的硬件选择、开发不受限制以及与Google应用无缝结合。

2.Android平台体系架构可分为哪些层?

答:Android平台体系架构可分为5层:Linux内核层、硬件抽象层、系统运行库层、Java API框架层和系统应用层。

3.在Android Studio中,可选择哪些设备来运行Android应用程序?

答:可选择在Android Studio中创建的模拟器或连接的物理设备来运行Android程序。

4.Android中,注册活动、内容提供器等组件的文件名是什么?

答:AndroidManifest.xml

5.可用哪些对象来输出日志信息?

答:可用System.out、System.err和Log对象在Android应用程序中输出日志信息。

第2章

1.请简述为一个活动绑定自定义视图的基本步骤。

答:为一个活动绑定自定义视图的基本步骤包括:

(1)创建项目。

(2)为项目添加布局资源文件。

(3)在活动的onCreate()方法中使用setContentView()方法来为活动绑定一个视图。

2.请问在一个活动中启动另一个活动的基本句法格式是什么?

答:在一个活动中启动另一个活动的基本句法格式如下:

startActivity(new Intent(context,class));

其中,context为当前活动上下文,class为另一个活动类。

3.Intent有哪些类型,这些类型之间有何区别?

答:Intent可分为显式Intent和隐式Intent。显式Intent指明了要启动的组件,隐式Intent则相反,它不指明要启动的组件,而是指明要执行的操作,让系统去选择可完成该操作的组件。

4.请简述向启动的活动中传递数据的基本过程。

答:向启动的活动中传递数据的基本过程包括下列几个步骤:

(1)创建用于启动活动的Intent对象

(2)调用Intent对象的putExtra()方法向Intent对象封装数据

(3)在启动对象后,首先执行getIntent()方法获取活动接收到的Intent对象,然后调用Intent对象的getStringExtra()等方法获得前一个活动传递过来的数据。

5.请问活动在其生命周期内可能有哪些状态?

答:活动在其生命周期内可能有4种状态:运行状态、暂停状态、停止状态和销毁状态。

6.请问活动在其生命周期内可能会调用哪些生命周期回调方法?

答:活动在其生命周期内可能会调用onCreate()、onStart()、onResume()、onPause()、onStop()、onRestart()和onDestroy()等方法。

7.请问活动有哪几种启动模式?

答:活动的启动模式有4种:standard、singleTop、singleTask和singleInstance。

第3章

1.简述视图(View)和视图组(ViewGroup)的联系和区别。

答:View类是所有用于设计界面组成元素的基类,Button、CheckBox、ExitView、ImageView、ProgressBar、TextView以及其他的UI组件,都是View类的子类或子类的派生类。

视图组是一种特殊的视图,它不具有可见性,而是一种容器。在视图组中可包含视图组和视图。ViewGroup类是View类的一个子类,它又是各种布局类的基类。常用的布局类有LinearLayout(线性布局)、RelativeLayout(相对布局)和FrameLayout(帧布局)类等。

2.列举5种基本的Android控件及其基本作用。

答:TextView控件用于显示文本,EditText控件用于输入文本,CheckBox控件用于创建复选框。RadioButton控件用于创建单选按钮,RadioGroup是RadioButton的容器,用于单选按钮分组,每组中的单选按钮只能选中一项。

3.简述如何使用Toast。

答:Toast是在应用运行期间,通过类似于对话框的方式向用户显示消息提示。Toast只占用很少的屏幕,并会在一段时间后自动消失。

在使用时,首先创建Toast,然后调用show()方法显示Toast。

4.简述如何使用Notification。

Notification用于创建通知区域通知,展开抽屉式通知栏可查看通知的详细信息。一个通知通常由图标、标题和内容等组成。

可按下列步骤使用Notification。

第一步:创建NotificationCompat.Builder对象。

第二步:调用NotificationCompat.Builder对象方法设置通知相关内容。

第三步:创建在抽屉式通知栏中单击通知时启动活动的Intent。

第四步:创建Notification对象。

第五步:创建NotificationManager对象显示通知。

5.简述如何使用RecyclerView。

答:RecyclerView用于创建滚动列表,并可实现垂直或水平滚动,甚至可实现多行或多列列表。要使用RecyclerView控件,首先需要在app\buil.gradle文件的dependencies闭包中添加支持库。

RecyclerView在使用时包含下列基本步骤:

第一步:准备列表显示的资源(字符串、图片)等。

第二步:在布局或代码中添加RecyclerView控件。

第三步:设置RecyclerView控件布局管理器类型。

第四步:定义RecyclerView适配器,完成用资源填充RecyclerView列表。

6.修改本章3.8实例,使用对话框显示登录验证信息。

只需将MainActivity.java中的:

        if(isLoged){

            //执行登录成功操作

            tvShow.setText("用户名和密码正确,登录成功!");

        }else {

            //执行登录失败操作

            tvShow.setText("用户名或密码错误,请重新登录!");

        }

修改为:

AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);

        dialog.setTitle("系统登录");

        String msg;

        if(isLoged){

            msg="用户名和密码正确,登录成功!";

        }else {

            msg="用户名或密码错误,请重新登录!";

        }

        dialog.setMessage(msg);

        dialog.show();

第4章

1.Android中广播可分哪些类型,分别有什么特点?

答:Android中的广播可分为两种类型:标准广播和有序广播。

标准广播在发出后,所有接收器均可接收到广播消息。各个接收器之间没有先后顺序之分。标准广播发出后,不可能被中断。有序广播:有序广播在发出后,同一时间只有优先级较高的一个接收器接收到广播消息。只有在优先级较高的接收器处理完广播消息后,广播才能继续向优先级较低的接收器继续传递。在当前接收器中,可中断广播,使后继接收器无法收到广播消息。

2.简述一个广播接收器类的基本结构。

答:一个广播接收器类的基本结构如下:

public class 子类名称 extends BroadcastReceiver {

    public BootReceiver() {

    }

    @Override

    public void onReceive(Context context, Intent intent) {

        //广播消息出来逻辑

    }

}

3.简述如何注册广播接收器。

答:广播接收器可以采用静态和动态方式进行注册。

静态注册是指在应用程序的清单文件AndroidManifest.xml中添加广播接收器的注册信息。动态注册是指在程序中用registerReceiver()方法进行注册。

4.简述如何使用有序广播。

答:有序广播接收器可在AndroidManifest.xml中使用<intent-filter>标签的android:priority属性来设置广播接收器优先级。在动态注册时可调用IntentFilter的setPriority()方法来设置接收器优先级。

发送有序广播需要调用sendOrderedBroadcast()方法,在处理有序广播消息时,可使用abortBroadcast()方法来终止广播。

第5章

1.简述如何访问一个内部存储文件。

答:

向一个内部存储文件写入数据的基本步骤如下:

(1)调用Context类的openFileOutput()方法打开指定文件。

(2)将openFileOutput()方法返回的FileOutputStream对象封装为OutputStreamWriter对象。

(3)使用OutputStreamWriter对象将字符串存入文件。

从一个内部存储文件读出数据的基本步骤如下:

(1)调用Context类的openFileIntput()方法打开指定文件。

(2)将openFileIntput()方法返回的FileInputStream对象封装为InputStreamReader对象。

(3)使用InputStreamReader对象从文件读取char数组。

2.简述如何访问一个外部存储文件。

答:访问外部存储文件与访问内部存储文件方法类似,不同之处在于:(1)需要为应用申请READ_EXTERNAL_STORAGE(读)或WRITE_EXTERNAL_STORAGE(写)权限,并在设备中允许应用访问存储器。(2)调用Environment.getExternalStorageDirectory()方法获得外部存储路径,然后调用File对象构造方法打开文件。

打开文件后,后继文件操作与访问内部存储文件相同。

3.简述如何使用SharedPreferences共享存储。

答:SharedPreferences共享存储采用键值对方式读写SharedPreferences文件。保存SharedPreferences数据基本步骤如下:

(1)获得SharedPreferences对象。

(2)获得SharedPreferences对象的Editor对象。

(3)调用Editor对象的方法向文件添加数据。

(4)提交数据,完成数据存储操作。

读取SharedPreferences数据只需调用SharedPreferences对象相应方法即可。

4.简述访问SQLite数据库的基本步骤。

答:访问SQLite数据库的基本步骤如下:

(1)创建SQLiteOpenHelper的子类,并实现onCreate()和OnUpgrade()方法。

(2)调用getWritableDatabase()和getReadableDatabase()方法打开数据库,获得SQLiteDatabase对象。

(3)调用SQLiteDatabase对象的insert()、update()、delete()和query()等方法完成数据的添加、更新、删除和查询等操作。

也可调用SQLiteDatabase对象的execSQL()和rawQuery()执行SQL命令完成各种数据库操作。

第6章

1.简述使用SoundPool播放音效的基本步骤。

答:基本步骤如下:

第1步:使用SoundPool.Builder或SoundPool构造方法创建SoundPool对象。

第2步:调用load方法加载音频资源。

第3步:调用play、pause、stop等方法。

2.简述使用MediaPlayer播放音效的基本步骤。

答:基本步骤如下:

第1步:创建MediaPlay对象。

第2步:调用setDataSource方法设置音频文件路径。

第3步:调用prepare方法加载音频。

第4步:调用start、pause、stop、reset等方法。

3.简述使用MediaRecorder记录声音的基本步骤。

答:基本步骤如下:

第1步:在应用程序的清单文件AndroidManifest.xml添加RECORD_AUDIO权限申请使用麦克风。

第2步:检查并动态申请用户授权。

第3步:创建MediaRecorder对象。

第4步:调用相关方法设置音频来源、输出格式、输出文件以及音频编码方式等信息。

第5步:调用prepare方法准备MediaRecorder。

第6步:调用start方法开始采集音频。

第7步:调用stop方法结束采集音频。

4.简述使用摄像头拍照的基本步骤。

答:基本步骤如下:

第1步:创建用于保存所拍照片的文件。

第2步:创建调用系统摄像头拍照程序的Intent对象。

第3步:执行startActivityForResult方法启动系统摄像头拍照程序。

第4步:在onActivityResult方法中处理系统摄像头拍照程序返回信息。

第7章

1.简述使用HttpURLConnection完成HTTP请求的基本步骤。

答:

第1步:创建HttpURLConnection实例对象。

第2步:调用setRequestMethod设置HTTP请求方法。

第3步:设置请求相关参数。

第4步:从InputStream对象中获取HTTP请求返回结果。

2.简述使用OkHttp完成HTTP请求的基本步骤。

答:

第1步:需要修改项目的app/build.gradle文件,添加OkHttp库编译信息。

第2步:创建OkHttpClient对象。

第3步:创建Request对象。

第4步:调用Request对象的execute()方法执行请求。

第5步:从Response对象中获得字符串形式的返回结果。

3.简述使用DOM解析XML的基本步骤。

答:

第1步:创建DocumentBuilderFactory对象。

第2步:创建DocumentBuilder对象。

第3步:将XML文档封装到InputSource对象中。

第4步:使用DocumentBuilder对象解析InputSource获得表示XML文档的Document对象。

第5步:调用Document对象的相关方法获取XML文档各个节点及其文本。

第8章

1.请说明如何创建线程。

答:有3中方法可以创建线程。

方法1:使用匿名类。例如:

new Thread(new Runnable() {

    @Override

    public void run() {

        //在此编写线程功能代码

    }

}).start();

方法2:先创建一个类来实现Runnable接口。例如:

class MyThread implements Runnable{

    @Override

    public void run() {

        //在此编写线程功能代码

    }

}

然后,按照下面的方式来启动线程。

new Thread(new MyThread()).start();

方法3:先定义一个类继承内置的Thread类来实现线程功能。例如:

class MyThread extends Thread{

    @Override

    public void run() {

        //在此编写线程功能代码

    }

}

然后,按照下面的方式来启动线程。

new MyThread().start();

2.请问能够在子线程中改变界面中TextView控件的文本吗?

答:不能直接在子线程中改变界面中TextView控件的文本。可以执行runOnUiThread()方法返回UI线程,或者通过Handler和Message对象来完成。

3.请问AsyncTask的哪些方法在主线程中执行,哪些方法在子线程中执行?

答:onPreExecute()、onPostExecute ()和onProgressUpdate ()方法在主线程中执行。doInBackground()方法在子线程中执行。

4.请问如何定义一个服务类。

答:定义一个服务类时,需要继承Service,并重写相应方法。基本结构如下:

public class MyService extends Service {

    public MyService() {

    }

    @Override

    public IBinder onBind(Intent intent) {

        // TODO: Return the communication channel to the service.

        throw new UnsupportedOperationException("Not yet implemented");

    }

    public void onCreate() {

        super.onCreate();

    }

    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

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

    }

    @Override

    public void onDestroy() {

        super.onDestroy();

    }

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐