前言
刚考完试,一边总结一边写,随即分享给大家。
复习提纲
- Android系统框架四层结构
- 应用层 Applications(手机上的app)
- 应用框架层 Application Framework(开发app用到的api接口)
- 核心类库层 Libraries(系统库&Android运行环境)
- Linux内核层 Linux Kernel(提供硬件驱动)
- AndroidManifest.xml清单文件通常包括如下内容
- 应用程序的包名,该包名作为该应用的唯一标识。
- 应用包含的组件,如Activity,Service,BroadcastReceiver和ContentProvider.
- 应用程序使用系统所需的权限声明。
- 其他程序访问该程序所需的权限声明。
- Android数据持久化存储方式
- 用来保存小块数据的轻量级的机制——共享首选项(sharedPreferences)。
- 传统的文件系统(file),将数据持久化到文件中。
- 通过SQLite数据库支持的关系数据库管理系统(SQLite)。
- 请简述Android系统中的5种数据存储方式各自的特点。
- 文件存储:可以存储较大文件,以IO流形式传输数据。
- SharedPreferences:使用方便,可以存储配置信息,以键值对的形式存于内存中
- SQLite数据库:占用内存小,所有文件都存放在单一文件中。
- ContentProvider:提供自身暴漏的数据给第三方应用使用,统一了数据访问格式,以数据库形式保存数据。
- 网络存储:通过网络将数据传输到服务器存储,避免了客户端的安全隐患。
- Activity生命周期的事件有哪些?点击 Back 键时,Activity 依次经历了哪几个事件?点 Home键时,Activity 依次经历了哪几个事件?
- 生命周期状态:启动状态、运行状态、暂停状态、停止状态、销毁状态
- 生命周期方法:
- onCreate(Bundle savedInstanceState):创建时执行。
- onStart(): 可见时执行。
- onRestart(): 回到前台,再次可见时执行。
- onResume(): 获取焦点时执行。
- onPause(): 失去焦点时执行。
- onStop(): 用户不可见进入后台时执行。
- onDestroy(): 销毁时执行。
- 点击 Back 键时,onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume;
- 点击 Home 键时,onPause -> onStop -> onRestart -> onStart -> onResume;
- 四大组件及其注册(重要)
- Activity(管理Android应用程序的用户界面)
<activity
android:name="cn.itcast.activitybasic.ActivityExample"
android:label="ActivityExample">
<intent-filter>
<action android:name="android.intent.action.MAIN"> // 表示将当前 Activity 设置为程序最先启动的 Activity。
<category android:name="android.intent.category.LAUNCHER"> // 表示让当前 Activity 在桌面上创建图标。
</intent-filter>
</activity>
- 内容提供者(ContentProvider)(用于保存和检索数据)
<provider
android:name="cn.itcast.db.PersonDBProvider" // 代表继承于 ContentProvider 类的全路径名称
android:authorities="cn.itcast.db.personprovider"> // 代表了访问本 provider 的路径
</provider>
- 广播接收者(BroadcastReceiver)
// 注册常驻型广播
<receiver android:name="cn.itcast.MyBroadcastReceiver"> // 创建的广播接收者的全路径名;
<intent-filter android:priority="20"> // 该广播的优先级
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
// 注册非常驻型广播
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
// 实例化过滤器并设置要过滤的广播
String action = "android.provider.Telephony.SMS_RECEIVED";
IntentFilter intentFilter = new IntentFilter(action);
// 注册广播
registerReceiver(receiver, intentFilter);
- 服务(service) 长期在后台运行且不提供用户界面。
<service android:name="cn.itcast.startService.MyService" />
- Android 布局类型
- 线性布局:LinerLayout
- 表格布局:TableLayout
- 相对布局:RelativeLayout
- 绝对布局:AbsoluteLayout
- 帧布局:FrameLayout
- 网格布局:GridLayout(4.0推出的)
- APK、ADT、AVD、ADB 的全称
- APK: android package,Android安装包;
- ADT: android development tool,Android 开发工具;
- AVD: android virtual device,android 虚拟设备;
- ADB: android debug bridge,android 调试桥;
- 分别举例说明如何在 Java 代码和布局 XML 文件中访问存储在 strings.xml 文件中的字符串资源?如何实现国际化的应用程序?
// strings.xml
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<string name="hello">Hello!</string>
</resources>
// 布局 XML 文件中
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
// Java 代码中
String string = getString(R.string.hello);
- Service****的主要功能特点及用途,以及如何启动?
- 特点:Service不需要与用户进行交互,不需要界面,在后台运行。
- 启动:
- 启动无交互的Service,startService(intent);停止:stopService(intent);
- 启动有交互的Service,bindService();停止:unbindService();
- Android中用户通知的三种技术分别是
- 状态栏通知、对话框通知、Toast
- MYSQL和SQLITE有什么重要区别?
- SQLITE是一种轻量级的数据库系统,MySQL /SQL Server是适用于服务器数据量大的数据库系统。
- SQLITE灵活性好,易于移植,无需安装。MySQL则相反。
- SQLITE只是一个嵌入式的数据库引擎,是一个文件。
- Log日志输出,级别
- 6个级别:
- Verbose: Log.v();
- Debug: Log.d();
- Info: Log.i();
- Warning: Log.w();
- Error: Log.e();
- Assets
- 6个级别:
- ListView和Adapter,常见的Adapter有哪些。
- ListView: 一个以列表的形式展示具体数据内容的控件。
用人话说就是,类似于你手机qq中的联系人列表。
- Adapter: 对 ListView 进行数据适配。
简单说,就是 ListView 只是一个空箱子,Adapter 用来往箱子里面装数据。
- 常见有arrayAdapter, SimpleAdapter,simpleCursorAdapter以及可自己扩展的baseAdapter。其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。 SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
- 编写一个应用程序对手机中的短信和通讯录以 XML 文件的形式备份至手机 SD 卡,需要 获取如下的权限
android.permission.READ_SMS
android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
SQLite数据库操作怎么做? SQLiteOpenHelper, SQLiteDatabase,Cursor各自的作用、方法。
-
SQLiteOpenHelper
- 作用: 是一个抽象类,该类用于创建数据库和数据库版本更新。
- 方法:
- SQLiteOpenHelper 构造方法;
- onCreate 创建数据库时调用的方法;
- onUpgrade 数据库版本更新时调用;
- getReadableDatabase 创建或打开一个只读的数据库;
- getWritableDatabase 创建或打开一个读写的数据库;
-
SQLiteDatabase
- 作用: 是一个数据库访问类,该类封装了一系列数据库操作的API。
- 方法:
- insert 添加一条记录;
- query 查询数据;
- rawQuery 执行带占位符的 SQL 查询;
- update 修改特定查询;
- delete 删除表中特定记录;
- execSQL 执行一条带占位符的 SQL 语句;
- close 关闭数据库;
-
Cursor
- 作用: 是一个游标接口,在数据库操作中作为返回值,相当于结果集 ResultSet。
- 方法:
- move:
- moveToNext 移动光标到下一行;
- moveToPrevious 移动光标到上一行;
- moveToFirst 移动光标到第一行;
- moveToLast 移动光标到最后一行;
- moveToPosition 移动光标到指定位置;
- get:
- getInt 获取指定列的整型值;
- getString 获取指定列的字符串;
- getColumnIndex 得到指定列索引值;
- getCount 返回 Cursor 中的行数;
- getPostion 返回当前 Cursor 的位置;
- getColumnName 根据列的索引值获取列的名称;
- getColumnNames 获取 Cursor 所有列的名称的数组;
- move:
-
内部存储是指将应用程序中的数据以文件方式存储到设备的内部存储空间中(该文件位于**data/data//files/**目录下),openFileOutput用于打开应用程序中对应的输出流,将数据存储到指定文件中;openFileInput用于打开应用称重对应的输入流,用于从文件中读取数据。
-
请简要写出使用 SharedPreferences 存储数据的步骤
- 使用Sharedpreference储存数据时因为它本身没有写文件的功能,因此需要使用Editor对象将数据存入内存,比如:
SharedPreferences sp = getSharedPreferences("config", 0);
Editor editor = sp.edit();
editor.putString("a", "a");
editor.commit();