中原工学院Android智能手机应用开发期末考点总结

111 阅读11分钟

转载自:www.sunjk.top/index.php/a…

以下考点内容适用于2024年秋季学期期末,仅供参考。源文件见文章末尾。

Android期末考点(带例子)

第一章

  1. 考察哪种文件放在哪个目录

    • 清单文件在manifests文件夹下

      • 在AndroidManifest.xml中,每个应用程序至少需要一个标签。
      • 四大组件均需要注册
      • 使用ContentResolver时,不需要在清单中注册
    • MainActivity在java目录下

  2. 每个应用程序只有一个清单文件,每一个组件对应一个Manifests标签

  3. settings.xml是Gradle配置文件,可进行Module项目的管理(×)

第二章

  1. View类有一个重要的子类:ViewGroup,ViewGrop类是所有布局类和容器控件的基类

  2. EditText两个重要属性

    • android:hint
    • android:inputType
  3. RelativeLayout

    • 参照物:父容器,兄弟组件

      • android:layout_toLeftOf​表示当前控件位于指定控件的左边
      • android:layout_alignParentLeft​表示控件对齐父容器的左边缘,alignParentRight/Bottom/Top同理
      • android:layout_alignLeft​表示将当前控件的左边缘对齐指定控件的左边缘
  4. FrameLayout

    • 默认效果:左上
  5. ListView通常以列表形式展示具体数据内容

  6. 当在布局文件中添加一个View视图后,它的layout_weight和layout_height属性不是必须的

  7. android:layout_gravity表示整个控件在父容器中的对齐方式。

    • android:layout_gravity适用于所有布局(×)
  8. 表格布局中android:layout_column属性的作用是指定列数

第三章

  1. 事件模型三大要素

    • 事件源
    • 事件
    • 监听器
  2. 事件处理机制

    • 基于监听的事件处理(使用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"
      
  3. 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可以用来发送消息和处理消息。(√)

第四章

  1. 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进行数据的操作。
  2. 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​ 中的任何资源。

        方法调用顺序:

        1. 用户离开 Activity​ 时,onPause()​ 先被调用。
        2. 如果 Activity​ 被完全遮挡,onStop()​ 被调用。
        3. 如果 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变为可见
    • 如何正确设置一个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​​

  3. 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、开启广播和服务

第五章

  1. Service启动方式(130页)

    • 绑定方式

      bindService()
      onCreate()
      onBind()
      onUnBind()
      onDestroy()

    • 非绑定方式

      startService()
      onCreate()
      onStartCommand()
      onDestroy()

    • 无论哪种启动方式,都会先执行onCreate()方法

    • 在清单文件中注册服务时应使用的结点是

    • 在Android系统中,服务的通信方式有两种,一种是本地服务通信,一种是远程服务通信

    • 所有创建的服务类都只能继承Service。(×)

    • 使用bindService()方式启动服务时,ServiceConnection对象可以为空

第六章

第七章

  1. openFileInput(String name):打开app数据文件夹下name文件对应的输入流

  2. openFileOutput(String name,int mode)

    • 向手机内置存储空间中写入新的内容时,首先调用的方法是openFileOutput()
    • 文件存储是通过I/O流的形式把数据原封不动的存储到文档中。(×)
    • AndroidQ及其以上版本,在进行外部文件存储时,若不想使用新特性,可以清单文件中的节点上添加android:requestLegancyExternalStorage="true"属性即可
    • AndroidQ及以上版本,用于获取外部存储路径的方法为ContextCompat.getExternalFilesDirs(Context,String)[0].getAbsolutePath();
  3. getExternalStorageDirectory():获取外部存储器目录

    • Android中的Environment.getExternalStorageDirectory()方法在高版本中未被弃用
  4. 内部存储文件默认是私有的,外部存储文件默认是公有的

  5. 当用户将文件保存至SD卡时,需要在清单文件中添加权限“android.permission.WRITE_EXTERNAL_STORAGE

  6. 在AndroidManifest.xml文件中声明了WRITE_EXTERNAL_STORAGE权限后,应用不可以直接读写SD卡上的文件

  7. 获取SD卡读写权限

    • android.permission.READ_EXTERNAL_STORAGE
    • android.permission.WRITE_EXTERNAL_STORAGE
  8. 在Android中,应用程序默认只能访问自己的内部存储空间,而不能直接访问外部存储空间

  9. 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);
      
  10. ‍SQLite

    • 什么是SQLite:是一个嵌入式轻量级关系型数据库

    • SQLite使用场景

      • 用来存储结构化数据(如用户、商品信息)
      • 用于需要进行复杂查询和事务处理的场景,适合存储大量数据,支持SQL语句进行数据操作
    • SQLiteOpenHelper的onCreate()方法只会执行一次

    • execSQL()

      • execSQL()​方法能够实现数据库的数据插入
      • execSQL()​方法不能查询记录,查询记录使用query()​​ 方法
    • SQLiteOpenHelper类的onCreate()方法的用途是初始化数据库表的表结构

    • SQLite除了可以使用XML进行数据库操作之外,还可以使用它提供的sqContentValues类来完成

    • 在Android中,SQLite数据库的创建需要继承SQLiteOpenHelper类。

  11. 指定文件可追加的文件操作权限为MODE_APPEND​​

第八章

  1. 在Android中,BitmapFactory.decodeFile()方法可以用来从文件路径加载图片。

  • Adapter继承自BaseAdapter,必须重写父类的方法有

    1. getCount() - 返回适配器中数据集的数量(条目的总数)
    2. getItem(int position) - 返回在指定位置的数据项
    3. getItemId(int position) - 返回指定位置的数据项的ID
    4. 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进行数据的操作

  • 接收系统短消息广播时,只能使用真机,在模拟器上完成不了(×)

www.123684.com/s/ffvqVv-o5…