转载自:www.sunjk.top/index.php/a…
以下考点内容适用于2024年秋季学期期末,仅供参考。源文件见文章末尾。
Android期末考点(带例子)
第一章
-
考察哪种文件放在哪个目录
-
清单文件在manifests文件夹下
- 在AndroidManifest.xml中,每个应用程序至少需要一个标签。
- 四大组件均需要注册
- 使用ContentResolver时,不需要在清单中注册
-
MainActivity在java目录下
-
-
每个应用程序只有一个清单文件,每一个组件对应一个Manifests标签
-
settings.xml是Gradle配置文件,可进行Module项目的管理(×)
第二章
-
View类有一个重要的子类:ViewGroup,ViewGrop类是所有布局类和容器控件的基类
-
EditText两个重要属性
- android:hint
- android:inputType
-
RelativeLayout
-
参照物:父容器,兄弟组件
-
android:layout_toLeftOf表示当前控件位于指定控件的左边 -
android:layout_alignParentLeft表示控件对齐父容器的左边缘,alignParentRight/Bottom/Top同理 -
android:layout_alignLeft表示将当前控件的左边缘对齐指定控件的左边缘
-
-
-
FrameLayout
- 默认效果:左上
-
ListView通常以列表形式展示具体数据内容
-
当在布局文件中添加一个View视图后,它的layout_weight和layout_height属性不是必须的。
-
android:layout_gravity表示整个控件在父容器中的对齐方式。
- android:layout_gravity适用于所有布局(×)
-
表格布局中android:layout_column属性的作用是指定列数
第三章
-
事件模型三大要素
- 事件源
- 事件
- 监听器
-
事件处理机制
-
基于监听的事件处理(使用OnClickListener接口,onClick()方法)
Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "按钮被点击了!", Toast.LENGTH_SHORT).show(); } }); -
基于回调的事件处理
@Override public boolean onTouchEvent(MotionEvent event) { Toast.makeText(this, "屏幕被触摸了!", Toast.LENGTH_SHORT).show(); return true; } -
直接绑定到标签
android:onClick = "methodName"
-
-
Handler消息传递机制(多线程之间传递消息)
-
创建Handler步骤
-
创建Handler类对象,并重写handleMessage()方法
Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // 处理消息 switch (msg.what) { case MESSAGE_TYPE_1: // 处理消息类型1 break; case MESSAGE_TYPE_2: // 处理消息类型2 break; // 其他消息类型 } } }; -
创建消息
Message message = new Message(); message.what = MESSAGE_TYPE_1; -
发送消息
handler.sendMessage(message); // 或者handler.sendEmptyMessage(); -
利用Handler对象的handleMessage()方法接收消息,然后根据不同的消息执行不同的操作
-
private Handler mHandler; // 声明Handler对象 mHandler = new Handler(){} // 创建Handler对象 private void start(){ // 在后台线程中发送消息 new Thread(new Runnable() { @Override public void run() { // 执行后台任务 try { Thread.sleep(2000); // 模拟耗时任务 } catch (InterruptedException e) { e.printStackTrace(); } // 通过Handler更新UI handler.sendEmptyMessage(0); } }).start(); }
-
-
-
简答:什么是Handler:Handler是一种用来与线程进行通信的消息传递机制。它可以将任务从一个线程(通常是后台线程)传递到主线程(UI线程)进行处理,通常用于更新UI或执行一些需要在主线程上完成的任务。
-
在Android中,Handler可以用来发送消息和处理消息。(√)
-
第四章
-
Android四大组件
-
Activity(标签:)
-
Service(标签:)
-
BroadcastReceiver(标签:)
-
要创建一个自定义广播接收器,需要继承BroadcastReceiver类,并重写其onReceive()方法来处理接收到的广播消息。
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyCustomBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 当接收到广播时,此方法会被调用 String action = intent.getAction(); if ("com.example.MY_CUSTOM_ACTION".equals(action)) { // 处理自定义广播 Toast.makeText(context, "收到自定义广播!", Toast.LENGTH_SHORT).show(); } } }@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... // 创建意图过滤器 IntentFilter filter = new IntentFilter(); filter.addAction("com.example.MY_CUSTOM_ACTION"); // 注册广播接收器 MyCustomBroadcastReceiver receiver = new MyCustomBroadcastReceiver(); registerReceiver(receiver, filter); } @Override protected void onDestroy() { super.onDestroy(); // 注销广播接收器 unregisterReceiver(receiver); } -
BroadcastReceiver可发送无序广播,也可发送有序广播,二者均可被拦截。(×)(无序广播不可以被拦截)
-
-
ContentProvider(标签:)
- ContentResolver可通过ContentProvider提供的Uri进行数据的操作。
-
-
Activity
-
每一个Activity都有一个界面
-
当一个新的activity启动的时候,先前的那个activity就会停止,但是系统会在堆栈中保存该activity
-
设置为主Activity:android.intent.action.MAIN
-
启动Activity的方法
- startActivity(Intent intent)
- startActivityForResult(Intent intent,int requestCode)
startActivityForResult()方法接收两个参数,第一个是Intent,第二个是请求码(requestCode) - startActivityFromChild
-
关闭Activity方法
- finish()
- finishActivity(int requestCode)
-
Activity从启动到关闭不会执行onRestart()
-
生命周期
-
onPause(),onStop(),onDestroy()方法的区别
1.
onPause() 方法- 触发时机:
onPause() 在Activity 即将被暂停时调用,通常是在另一个Activity 被启动,或者当前Activity 失去焦点时触发(例如,当用户按下 Home 键,或打开了另一个应用)。 - 用途:
onPause() 方法通常用于暂停当前Activity 中的操作,如停止动画、暂停视频播放、保存未保存的数据或释放一些不再需要的资源。需要注意的是,onPause() 方法不意味着Activity 完全停止,它可能会再次恢复。
2.
onStop() 方法- 触发时机:
onStop() 在Activity 不再对用户可见时调用,通常是当Activity 被完全遮挡或者被销毁时调用。比如,当用户切换到另一个Activity,或者当前Activity 被销毁时。 - 用途:
onStop() 方法通常用于释放占用的系统资源,如关闭数据库连接、停止后台服务等。onStop() 方法保证当前Activity 完全不可见,因此此时可以进行更多的资源释放操作。
3.
onDestroy() 方法- 触发时机:
onDestroy() 是Activity 生命周期中的最后一个方法,表示Activity 即将被销毁。这个方法通常在Activity 被系统销毁,或者开发者手动调用finish() 方法时触发。 - 用途:
onDestroy() 方法主要用于进行清理工作,如释放内存、注销广播接收器等。由于在此方法后Activity 会被完全销毁,因此不应再使用该Activity 中的任何资源。
方法调用顺序:
- 用户离开
Activity 时,onPause() 先被调用。 - 如果
Activity 被完全遮挡,onStop() 被调用。 - 如果
Activity 最终被销毁,onDestroy() 被调用。
总结:
-
onPause() :在Activity 暂停时调用,用于保存数据、停止动画等轻量级操作。 -
onStop() :在Activity 不再可见时调用,用于释放更大量的资源,如停止服务等。 -
onDestroy() :在Activity 被销毁时调用,用于清理占用的资源,如注销广播接收器、释放内存等。
- 触发时机:
-
91页
-
对于Activity中一些永久性的重要资源与状态最好在onPause()方法中进行保存
-
Activity生命周期中的“对”
- onCreate()和onDestroy()
当Activity首次创建时触发,onDestroy()在Activity销毁时调用 - onStart()和onStop()
当Activity变为可见时触发,onStop()当Activity不可见时调用 - onResume()和onPause()
当Activity从后台恢复到前台时触发,onPause()当Activity进入后台时调用 - onRestart()和onStart()
当Activity从停止状态重新启动时触发,onStart()用于Activity变为可见
- onCreate()和onDestroy()
-
-
如何正确设置一个Activity作为应用程序的启动Activity:在标签中添加标签,并设置action为ACTION_MAIN和category为CATEGORY_LAUNCHER
<action android:name="android.intent.action.MAIN" /> <!-- 设置主入口 --> <category android:name="android.intent.category.LAUNCHER" /> <!-- 设置 LAUNCHER 类别 --> -
为按钮Button添加点击事件的监听器使用的方法是setOnClickListener()
-
作为Android应用程序的主入口点的类,需要继承自Activity类
-
销毁Activity的生命周期方法是onDestroy()
-
Android应用程序不一定要有Activity
-
Android应用程序的入口是ACTION_MAIN
-
Activity获取焦点时执行的方法是
onResume() -
Activity通过
setContentView() 方法设置布局文件 -
线程与Activity通信的桥梁是
Handler
-
-
Intent
-
Intent作用
Intent是对一次即将运行的操作的抽象描述,包括操作的动作、动作涉及的数据、附加数据等,Android系统则根据Intent的描述,负责找到对应的组件,完成组件的调用
-
putExtra(Bundle data)
-
Intent实现步骤
-
创建意图,封装数据
Intent intent = new Intent(this,SecondActivity.class); // this是当前的Context,SecondActivity.class是将要启动的Activity intent.putExtra("key","value"); -
跳转页面
-
获取Intent,从Intent中获取数据
// 在SecondActivity中获取数据 String data = getIntent().getStringExtra("key");
-
-
通过putExtra方法添加键值对,例如,要向Intent对象intent中添加一个名为"username"的字符串数据"张三",可以使用代码
intent.putExtra("username","张三"); -
Intent可以启动Activity、开启广播和服务
-
第五章
-
Service启动方式(130页)
-
绑定方式
bindService()
onCreate()
onBind()
onUnBind()
onDestroy() -
非绑定方式
startService()
onCreate()
onStartCommand()
onDestroy() -
无论哪种启动方式,都会先执行onCreate()方法
-
在清单文件中注册服务时应使用的结点是
-
在Android系统中,服务的通信方式有两种,一种是本地服务通信,一种是远程服务通信
-
所有创建的服务类都只能继承Service。(×)
-
使用bindService()方式启动服务时,ServiceConnection对象可以为空
-
第六章
第七章
-
openFileInput(String name):打开app数据文件夹下name文件对应的输入流
-
openFileOutput(String name,int mode)
- 向手机内置存储空间中写入新的内容时,首先调用的方法是openFileOutput()
- 文件存储是通过I/O流的形式把数据原封不动的存储到文档中。(×)
- AndroidQ及其以上版本,在进行外部文件存储时,若不想使用新特性,可以清单文件中的节点上添加android:requestLegancyExternalStorage="true"属性即可
- AndroidQ及以上版本,用于获取外部存储路径的方法为ContextCompat.getExternalFilesDirs(Context,String)[0].getAbsolutePath();
-
getExternalStorageDirectory():获取外部存储器目录
- Android中的Environment.getExternalStorageDirectory()方法在高版本中未被弃用。
-
内部存储文件默认是私有的,外部存储文件默认是公有的
-
当用户将文件保存至SD卡时,需要在清单文件中添加权限“android.permission.WRITE_EXTERNAL_STORAGE”
-
在AndroidManifest.xml文件中声明了WRITE_EXTERNAL_STORAGE权限后,应用不可以直接读写SD卡上的文件
-
获取SD卡读写权限
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
-
在Android中,应用程序默认只能访问自己的内部存储空间,而不能直接访问外部存储空间
-
SharedPreferences
-
使用场景:存储应用设置、存储用户登录状态、保存短期数据
-
什么是SharedPreferences:SharedPreferences是一个轻量级的存储类,主要用于存储一些应用程序的配置信息
-
使用SharedPreferences存储的文件路径为data/data/包名/shared_prefs
-
SharedPreferences.Editor接口提供了异步提交更改方法apply(),使修改的数据生效(或者使用editor.commit())
-
SharedPreferences的写入操作需要先获取Editor对象
-
Android中获取到sp对象:
SharedPreferences sp = getSharedPreferences("my_preferences",MODE_PRIVATE); -
SharedPreferenced只能存储字符串类型的值(×)
-
使用SharedPreferences存储文件时,不只能采用私有方式存储,还能使用别的方式存储(私有方式和追加模式)(√)
-
SharedPreferences的Editor对象的commit()方法返回一个布尔值,表示操作是否成功(√)
-
SharedPreferences存储的数据不可以被其他应用程序访问
-
getSharedPreferences(String name,int mode)参数不需要文件后缀名
-
使用SharedPreferences存储文件时,不需要指定存储文件的类型
-
保存数据
SharedPreferences sharedpreferences = getSharedPreferences("my_preferences",MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("key_string","Hello,SharedPreferences!") editor.putInt(...); editor.putBoolean(...); editor.apply(); -
读取数据
SharedPreferences sharedPreferences = context.getSharedPreferences("my_preferences", Context.MODE_PRIVATE); // 读取数据 String stringValue = sharedPreferences.getString("key_string", ""); int intValue = sharedPreferences.getInt("key_int", 0); oleanValue = sharedPreferences.getBoolean("key_boolean", false);
-
-
SQLite
-
什么是SQLite:是一个嵌入式轻量级关系型数据库
-
SQLite使用场景:
- 用来存储结构化数据(如用户、商品信息)
- 用于需要进行复杂查询和事务处理的场景,适合存储大量数据,支持SQL语句进行数据操作
-
SQLiteOpenHelper的onCreate()方法只会执行一次
-
execSQL()
-
execSQL()方法能够实现数据库的数据插入 -
execSQL()方法不能查询记录,查询记录使用query() 方法
-
-
SQLiteOpenHelper类的onCreate()方法的用途是初始化数据库表的表结构
-
SQLite除了可以使用XML进行数据库操作之外,还可以使用它提供的sqContentValues类来完成
-
在Android中,SQLite数据库的创建需要继承SQLiteOpenHelper类。
-
-
指定文件可追加的文件操作权限为
MODE_APPEND
第八章
- 在Android中,BitmapFactory.decodeFile()方法可以用来从文件路径加载图片。
-
Adapter继承自BaseAdapter,必须重写父类的方法有
- getCount() - 返回适配器中数据集的数量(条目的总数)
- getItem(int position) - 返回在指定位置的数据项
- getItemId(int position) - 返回指定位置的数据项的ID
- getView(int position, View convertView, ViewGroup parent) - 返回一个视图来显示在指定位置的数据项
-
从BaseAdapter继承而来的有SimpleAdapter、ArrayAdapter、CursorAdapter
-
在网络请求中,使用HttpURLConnection可以直接访问网络资源,但需要手动处理连接和数据流。
-
自己所开发的应用程序属于Android软件栈的应用程序层
-
用于将TextView设置为隐藏状态的是
android:visiability="gone" -
RelativeLayout属性
-
android:layout_toLeftOf表示当前控件位于指定控件的左边 -
android:layout_alignParentLeft表示控件对齐父容器的左边缘,alignParentRight/Bottom/Top同理 -
android:layout_alignLeft表示将当前控件的左边缘对齐指定控件的左边缘
-
-
Toast.LENGTH_LONG表示Toast较长时间显示 -
使用EditText在接收用户输入时,如果想限制用户的输入类型,应使用
inputType属性 -
用户自定义的图片存于drawable文件夹
-
ContentResolver可通过ContentProvider提供的Uri进行数据的操作
-
接收系统短消息广播时,只能使用真机,在模拟器上完成不了(×)