Android复习简答题

一、基础入门

Android程序架构

(1)app:用于存放程序的代码和资源等内容。包含很多子目录

·libs:存放第三方jar包

·src/androidTest:存放调试的代码文件

·src/main/androidMainfest.xml 整个程序的配置文件,可配置程序所需要的权限和注册程序中用到的四大组件

·src/main/java:存放程序的代码文件

·src/main/res:存放程序的资源文件

·app/build.gradle:是App的gradle构建脚本。

(2)build.gradle:是Android程序的gradle构建脚本

(3)local.properties:指定Android程序中所使用的SDK路径

(4)settings.gradle:配置在Android程序中使用到的子项目(Moudle)

2. 简述Android源代码的编译过程

答:Java源文件经过JDK编译器编译为class文件后,Dalvik虚拟机中的Dx工具会将部分class文件转换成dex文件,dex文件还会在Dalvik虚拟机中进一步优化成odex文件。

3.简述Android系统架构包含的层次以及各层的特点(体系结构)

答:Android系统架构从高到低分为四层,分别为依次是应用程序层(Applications)、应用程序框架层(Application Framework)、核心类库(Libraries)和Linux内核(Linux Kernel),各层的特点具体如下:

  1. 应用程序层:一个核心应用程序的集合,安装在手机中的应用程序都属于这一层。
  2. 应用程序架构层:主要提供了构建应用程序时用到的各种API。例如活动管理器(Activity Manager)。
  3. 核心类库:主要包含了系统库和Android运行环境。
  4. Linux内核:它为Android设备的各种硬件提供了底层的驱动,如,显示驱动、音频驱动。

1. 简述Activity的生命周期的方法及什么时候被调用

答:Activity一共有7个方法,这些方法和调用的时机具体如下:

1、onCreate():Activity创建时调用,通常做一些初始化设置。

2、onStart():Activity即将可见时调用。

3、onResume():Activity获取焦点时调用。

4、onPause():当前Activity被其他Activity覆盖或屏幕锁屏时调用。

5、onStop():Activity对用户不可见时调用。 

6、onDestroy():Activity销毁时调用。

7、onRestart():Activity从停止状态到再次启动时调用。

2. 简述Activity的四种启动模式及其特点

答:Activity的四种启动模式分别为standard、singleTop、singleTask和singleInstance,这些模式的特点具体如下:

  1. standard:每启动一个Activity就会在栈顶创建一个新的实例。
  2. singleTop:当被启动的Activity位于栈顶时,复用该Activity实例。
  3. singleTask:当被启动的Activity在栈中存在实例时,会直接复用此Activity实例,并把当前Activity上面的所有实例弹出栈。
  4. singleInstance:会启动一个新的任务栈来管理该Activity。

 Activity生命周期5状态:启动、运行、暂停、停止、销毁。

Fragment 的生命周期比 Activity 的生命周期多了以下几个方法,具体如下。
onAttach():Fragment和Activity 建立关联时调用。

onCreateView():Fragment创建视图(加载布局)时调用。

onActivityCreate():Fragment相关联的Activity 已经创建完成时调用。

onDestroyView():Fragment关联的视图被移除时调用。

onDetach():Fragment和Activity 解除关联时调用。

1.简述数据库事物的4个基本要素要素

答:事务的操作比较严格,他必须满足ACID,ACID是指数据库事务正确执行的四个基本要素的缩写,这些要素包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),接下来针对这四个基本要素进行详细解释。

  1. 原子性:表示事务是一个不可再分割的工作单位,事务中的操作要么全部成功,要么全部失败回滚。
  2. 一致性:表示事务开始之前和结束之后,数据库的完整性没有被破坏。也就是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
  3. 隔离性:表示并发的事务是相互隔离的,也就是一个事务内部的操作都必须封锁起来,不会被其他事务影响到。
  4. 持久性:表示事务一旦提交后,该事务对数据做的更改便持久保存在数据库中,并不会被回滚,即使出现了断电等事故,也不会影响数据库中的数据。

2. 简述Android数据存储的方式

答:Android平台提供的五种数据存储方式,分别为文件存储、SharedPreferences、SQLite数据库、ContentProvider和网络存储,这些存储方式的特点如下。

  1. 文件存储:Android提供了openFileInput()和openFileOutput()方法来读取设备上的文件,其读取方式与Java中I/O程序是完全一样的。
  2. SharedPreferences:这是Android提供的用来存储一些简单的配置信息的一种机制,它采用了XML格式将数据存储到设备中。通常情况下,我们使用SharedPreferences存储一些应用程序的各种配置信息,如用户名、密码等。
  3. SQLite数据库:SQLite是Android自带的一个轻量级的数据库,他运算速度快,占用资源少,还支持基本SQL语法,一般使用他作为复杂数据的存储引擎,可以存储用户信息等。
  4. ContentProvider:Android四大组件之一,主要用于应用程序之间的数据交换,它可以将自己的数据共享给其他应用程序使用。
  5. 网络存储:需要与Android网络数据包打交道,将数据存储到服务器上,通过网络提供的存储空间来存储/获取数据信息。

1. 简述内容提供者的工作原理

答:假设B程序需要操作A程序数据库中的数据,一般需要A程序使用ContentProvider

暴露数据,才能被其他程序操作。B程序通过ContentResolver操作A程序暴露出来的数据,而A程序会将操作结果返回给ContentResolver,然后ContentResolver再将操作结果返回给B程序。

2. 简述内容观察者的工作原理

使用ContentObserver观察A程序的数据时,首先要在A程序的ContentProvider中调用ContentResolver的notifyChange()方法。调用此方法后,当B程序操作A程序中的数据时,A程序会向“消息中心”发送数据变化的消息,此时C程序会观察到“消息中心”的数据有变化,会触发ContentObserver的onChange()方法。

异步回调机制handler

handler消息处理首先需要在UI线程中创建一个handle对象,然后在子线程中调用handler对象的sendMessage()方法,接着这个消息会被存放在UI线程里的MessageQueue对象中。通过Looper对象取出消息,最后分发回handler对象的handleMessage()方法中。

Service是Android 中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种程序,当用户切换到另外的应用场景,Service将持续在后台运行。

1.简述Service的两种启动方式

答:Service的启动方式分别可以调用startService()、bindService()方法,这两个启动方式的区别如下所示:

  1. 生命周期
  1. startService():使用该方法开启Service时,执行的生命周期方法依次为onCreate()、onStartCommand()、onDestroy()。
  2. bindService():使用该方法开启Service时,执行的生命周期方法依次为:onCreate()、onBind()、onUnbind()、onDestroy()。
  1. 停止服务的方法
  1. startService():调用stopSelf()、stopService()方法停止服务。
  2. bindService():调用unbindService()方法停止服务。
  1. 组件的关联
  1. startService():当一个组件通过此方法开启服务时,服务与开启该组件没有关联,即使开启服务的组件被销毁,服务依旧运行。
  2. bindService():当一个组件通过此方法开启服务时,服务会与该组件绑定,组件一旦被销毁,该服务也会被销毁。

2. 简述Service的生命周期?

答:使用不同的方式启动服务,其生命周期会不同。开启服务的方法分别为startService()、bindService(),当通过startService()方法启动服务时,执行的生命周期方法依次为onCreate()、onStartCommand()、onDestroy()。当通过bindService()方法启动服务时,执行的生命周期方法依次为onCreate()、onBind()、onUnbind()、onDestroy()。其生命周期方法的具体含义如下:

  1. onCreate ():第一次创建服务时执行的方法。
  2. onStartCommand():调用startService()方法启动服务时执行的方法。
  3. onBind():调用bindService()方法启动服务时执行的方法。
  4. onUnbind():调用unBindService()方法断开服务绑定时执行的方法。
  5. onDestory():服务被销毁时执行的方法。

1. 广播机制的实现过程

答:Android中的广播使用了观察者模式,即基于消息的发布/订阅事件的模式。广播发送者和接收者分别处于观察者模式中的消息发布和订阅两端。广播机制的实现过程具体如下:

1. 广播接收者通过Binder机制在AMS(Activity Manager Service)中进行注册。

2. 广播发送者通过Binder机制向AMS发送广播。

3. AMS查找符合相应条件(IntentFilter/Permission)的广播接收者,将广播发送到相应的消息循环队列中。

4. 执行消息循环时获取到发送的广播,然后回调广播接收者中的onReceive()方法并在该方法中进行相关处理。

2. 简述有序广播和无序广播的区别

答:广播分为有序广播和无序广播,他们有以下几点的区别。

(1) 发送广播时,使用的方法不同。有序广播使用sendOrderedBroadcast()发送广播,而无序广播使用sendBroadcast()方法发送广播。

(2) 广播接收者执行的顺序

  1. 有序广播的接收者是顺序执行的。

有序广播按照广播接收者声明的优先级别被依次接收。当在高级别的广播接收者逻辑执行完毕之后,广播才会继续传递。当优先级相同时,先注册的广播接受者优先执行。

  1. 无序广播是完全异步执行的。

当发送无序广播时,所有监听这个广播的广播接收者都会接收到此广播消息,但接收和执行的顺序不确定。

(3)拦截广播

有序广播的接收者可拦截广播。如果优先级较高的广播接收者将广播终止,那么广播将不再向后传递。而无序广播则不能被拦截。

(4)效率

有序广播的效率比无序广播低。

2. 简述实现Button按钮的点击事件的方式有哪几种?

答:实现Button按钮的点击事件一共有3种方式,具体如下:

  1. 在布局文件中指定onClick属性的方式设置点击事件。

2、使用匿名内部类的方式设置点击事件。

3、通过为Activity实现OnClickListener接口的方式设置点击事件。


public class FR extends AppCompatActivity {
    private ListView Lv;
    private String[] titles ={"table","apple","green"};
    private String[] price={"1","2","3"};
    private  int[] icons ={R.drawable.r,R.drawable.r,R.drawable.r};
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);
        Lv =findViewById(R.id.lv);
        MybaseAdapter baseAdapter =new MybaseAdapter();
        Lv.setAdapter(baseAdapter);
    }

class MybaseAdapter extends BaseAdapter {
    @Override
    public int getCount() {
        return titles.length;
    }

    @Override
    public Object getItem(int i) {
        return titles[i];
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View cview, ViewGroup viewGroup) {
//        View view1 =View.inflate(FR.this,R.layout.item,null);
//        TextView prices = view1.findViewById(R.id.price);
//        TextView title = view1.findViewById(R.id.title);
//        ImageView Iv = view1.findViewById(R.id.iv);
//        prices.setText(price[i]);
//        title.setText(titles[i]);
        ViewHolder holder =null;
        if (cview == null){
            cview=View.inflate(FR.this,R.layout.item,null);
            holder = new ViewHolder();
            holder.title =cview.findViewById(R.id.title);
            holder.price=cview.findViewById(R.id.price);
            cview.setTag(holder);
        }else {
            holder = (ViewHolder) cview.getTag();
        }
        holder.title.setText(titles[i]);
        holder.price.setText(price[i]);
        return cview;
    }
}
class ViewHolder{
    TextView title ,price;
    ImageView iv;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 <TextView
     android:layout_width="match_parent"
     android:layout_height="45dp"
     android:text="购物商城"
     android:textSize="18sp"
     android:textColor="#FFFFFF"
     android:background="#FF8F03"
     android:gravity="center"/>
 <ListView
     android:id="@+id/lv"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">
    <ImageView
        android:id="@+id/iv"
        android:layout_width="120dp"
        android:layout_height="90dp"
        android:layout_centerVertical="true"/>
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/iv"
        android:layout_centerVertical="true">
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="桌子"
            android:textSize="20sp"
            android:textColor="#000000" />
        <TextView
            android:id="@+id/tv_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="价格:"
            android:textSize="20sp"
            android:layout_marginTop="10dp"
            android:layout_below="@+id/title"
            android:textColor="#FF8F03" />
        <TextView
            android:id="@+id/price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1000"
            android:textSize="20sp"
            android:layout_below="@+id/title"
            android:layout_toRightOf="@+id/tv_price"
            android:textColor="#FF8F03"
            android:layout_marginTop="10dp"/>
    </RelativeLayout>
</RelativeLayout>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/926198.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PaddleOCR:一款高性能的OCR工具介绍

一、引言 随着人工智能技术的不断发展&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术在各行各业得到了广泛应用。OCR技术能够将图片、扫描件等非结构化数据中的文字信息提取出来&#xff0c;转换为可编辑的文本格式。在我国&#xff0c;百度开源了一款优秀的OCR工具…

HTML5好看的音乐播放器多种风格(附源码)

文章目录 1.设计来源1.1 音乐播放器风格1效果1.2 音乐播放器风格2效果1.3 音乐播放器风格3效果1.4 音乐播放器风格4效果1.5 音乐播放器风格5效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&…

11、数组

1、数组概念 数组就是存储多个相同数据类型的数据。 比如&#xff1a;存储26个字母&#xff0c;存储一个班级的学生成绩。 2、数组使用 数组要遵循先定义再使用 2.1、数组定义的格式 存储数据---空间 ---- 数据类型 多少个 --- 数据个数 >> 数据类型 数…

C底层 函数栈帧

文章目录 一&#xff0c;什么是寄存器 二&#xff0c;栈和帧 前言 我们在学习c语言程序的时候&#xff0c;是不是有很多的疑问&#xff0c;如 1&#xff0c;为什么形参不可以改变实参 2&#xff0c;为什么我们编写程序的时候会出现烫烫烫......这个乱码 3&#xff0c;那些局…

MATLAB期末复习笔记(二)

三、MATLAB函数和程序结构 1.MATLAB文件 两种类型的M文件&#xff1a; • 脚本 &#xff0c;不接受输入参数或返回输出参数。它们处理工作区中的数据。 • 函数 &#xff0c;可接受输入参数&#xff0c;并返回输出参数。内部变量是函数的局部变量。 ① 函数文件是另一类 m 文…

redis的应用----缓存

redis的应用----缓存 一、缓存的概念二、使用redis作为缓存2.1使用redis作为缓存的原因2.2缓存机制的访问步骤 三、缓存的更新策略3.1定期更新3.2实时更新3.3淘汰策略 四、缓存常见的问题4.1缓存预热(Cache preheating)4.2缓存穿透(Cache penetration)4.3缓存雪崩(Cache avalan…

2025年Java面试八股文大全

很多人会问Java面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。 国内的互联网面试&#xff0c;恐怕是现存的、最接近科举考试的制度。 而且&#xff0c;我国的八股文确…

JiaJia-CP-1,2,3的WP(2)

一.JiaJia-CP-2 一看题目&#xff0c;聊天软件&#xff0c;用的什么聊天软件直接userassist看运行过什么程序 vol -f JiaJia_Co.raw --profileWin7SP1x64 userassist 发现Telegram.exe(小飞机) 可能性很大啊(真是个摸鱼大神) 除此之外&#xff0c;filescan也能看到&#xff0…

小F的矩阵值调整

问题描述 小F得到了一个矩阵。如果矩阵中某一个格子的值是偶数&#xff0c;则该值变为它的三倍&#xff1b;如果是奇数&#xff0c;则保持不变。小F想知道调整后的矩阵是什么样子的。 测试样例 样例1&#xff1a; 输入&#xff1a;a [[1, 2, 3], [4, 5, 6]] 输出&#xff1a…

Docker Buildx 与 CNB 多平台构建实践

一、Docker Buildx 功能介绍 docker buildx 是 Docker 提供的一个增强版构建工具&#xff0c;支持更强大的构建功能&#xff0c;特别是在构建多平台镜像和高效处理复杂 Docker 镜像方面。 1.1 主要功能 多平台构建支持 使用 docker buildx&#xff0c;可以在单台设备上构建…

uni-app 使用笔记

1.缓存用法 &#xff08;1&#xff09;uni-app 存值取值删除 官网&#xff1a;https://uniapp.dcloud.net.cn/api/storage/storage.html#setstorage 存值 uni.setStorageSync(storage_key, hello);取值 uni.getStorageSync(storage_key)删除 uni.removeStorageSync(storag…

Unity的GPU Instancing技术

首先新建一个场景&#xff0c;添加一个相机&#xff0c;并创建一个Render Texture给相机。 然后在相机上挂载以下脚本TestBatches &#xff0c;同时脚本的Inspector面板的Mesh中选择Cube&#xff0c;另外创建一个新的材质拖动给mat&#xff1a; public class TestBatches : M…

你真的会用饼图吗?JVS-智能BI饼图组件深度解析

在数据可视化的世界里&#xff0c;饼图是我们常见的一种可视化图形。在JVS-智能BI中提供了数据可视化饼图组件&#xff0c;接下来我通过这篇文章详细介绍&#xff0c;从配色方案到图形配置&#xff0c;从显示数据到提示信息&#xff0c;饼图的每一个细节配置。 饼图类图表概述…

IOS ARKit进行图像识别

先讲一下基础控涧&#xff0c;资源的话可以留言&#xff0c;抽空我把它传到GitHub上&#xff0c;这里没写收积分&#xff0c;竟然充值才能下载&#xff0c;我下载也要充值&#xff0c;牛&#xff01; ARSCNView 可以理解画布或者场景 1 配置 ARWorldTrackingConfiguration AR追…

golang debug调试

1. 本地调试 1&#xff1a;Add Configurations 添加配置文件&#xff08;Run kind &#xff1a;Directory&#xff09; 2&#xff1a;进入run运行窗口 3&#xff1a;debug断点调试模式 1. Resume Program (继续运行) 图标: ▶️ 或 ► 快捷键: F9&#xff08;Windows/Linux&a…

联想YOGA Pro 14s至尊版电脑找不到独立显卡(N卡)问题,也无法安装驱动的问题

问题描述 电脑是联想YOGA Pro 14s至尊版&#xff0c;电脑上装的独立显卡是4060&#xff0c;一直是能够使用独立显卡的。然而有两次突然就找不到显卡了&#xff0c;NVIDIA CONTROL PANEL也消失了&#xff0c;而且也无法安装驱动。具体表现如下&#xff1a; 无法连接外接显示器…

Python酷库之旅-第三方库Pandas(250)

目录 一、用法精讲 1181、pandas.tseries.offsets.BusinessMonthEnd.is_on_offset方法 1181-1、语法 1181-2、参数 1181-3、功能 1181-4、返回值 1181-5、说明 1181-6、用法 1181-6-1、数据准备 1181-6-2、代码示例 1181-6-3、结果输出 1182、pandas.tseries.offse…

【机器学习】机器学习的基本分类-监督学习-逻辑回归-Sigmoid 函数

Sigmoid 函数是一种常用的激活函数&#xff0c;尤其在神经网络和逻辑回归中扮演重要角色。它将输入的实数映射到区间 (0, 1)&#xff0c;形状类似于字母 "S"。 1. 定义与公式 Sigmoid 函数的公式为&#xff1a; 特点 输出范围&#xff1a;(0, 1)&#xff0c;适合用…

点云处理中obb算法原理和法向量求解方法

主要数学原理PCA PCA&#xff08;Principal Component Analysis&#xff0c;主成分分析&#xff09;是数据分析中的一种重要技术&#xff0c;通过它可以将高维数据投影到低维空间&#xff0c;找到数据的主要结构。在点云分析中&#xff0c;PCA 可以帮助我们提取点云数据中的主…

四:工具、环境准备-compute node

一&#xff1a;工具、环境准备-controller node 二&#xff1a;OpenStack环境准备-controller node 三&#xff1a;安装服务-controller node 四&#xff1a;工具、环境准备-compute node 五&#xff1a;OpenStack环境准备-compute node 六&#xff1a;安装服务-compute node 七…