阿里Andorid研发一面:小姑娘挺不错来给我先讲讲Fragment和Activity相关吧

Android 13 AIDL服务编写 Android 11开始已经废除了HIDL转而使用AIDL,以Android 13为例,写一个最简单的AIDL及C++服务 阅读详情

之前在github上更新了些关于面试类的文章,含有从基础到进阶。含有BATJ.字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等应有尽有。还有辅之相关的视频+学习笔记

https://github.com/xiangjiana/androids
好久没更新了,公司电脑太卡了o(╥﹏╥)o。(把所以的知识+每日一题整理成了份983页的PDF)

更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取

一丶Fragment
1 、谈一谈 Fragment 的生命周期?

参考回答:
Fragment 从创建到销毁整个生命周期中涉及到的方法依次
为:onAttach()→onCreate()→
onCreateView()→onActivityCreated()→onStart()→onR esume()→onPause()→onStop()→onDestroyView()→onDestroy()→onDetach(),其中和 Activity 有不少名称相同
作用相似的方法,而不同的方法有:

  • onAttach(): 当 Fragment 和 Activity 建立关联时
    调用;
  • onCreateView(): 当 fragment 创建视图调用,在
    onCreate 之后;
  • onActivityCreated(): 当与 Fragment 相关联的
    Activity 完成 onCreate()之后调用;
  • onDestroyView(): 在 Fragment 中的布局被移除时
    调用;
  • onDetach(): 当 Fragment 和 Activity 解除关联时
    调用;
2 、谈谈 Activity 和 和 Fragment 的区别?

参考回答:
相似点: 都可包含布局、可有自己的生命周期
不同点:

  • Fragment 相比较于 Activity 多出 4 个回调周期,
    在控制操作上更灵活;
  • Fragment 可以在 XML 文件中直接进行写入,也可以
    在 Activity 中动态添加;
  • Fragment 可以使用 show()/hide()或者 replace()
    随时对 Fragment 进行切换,并且切换的时候不会出
    现明显的效果,用户体验会好;Activity 虽然也可
    以进行切换,但是 Activity 之间切换会有明显的翻
    页或者其他的效果,在小部分内容的切换上给用户
    的感觉不是很好;
3 、Fragment 中 add 与 与 replace 的区别(Fragment 重叠)

参考回答:

  • add 不会重新初始化 fragment,replace 每次都会。所以
    如果在 fragment 生命周期内获取获取数据,使用 replace
    会重复获取;
  • 添加相同的 fragment 时,replace 不会有任何变化,add
    会报 IllegalStateException 异常;
  • replace 先 remove 掉相同 id 的所有 fragment,然后在
    add 当前的这个 fragment,而 add 是覆盖前一个
    fragment。所以如果使用 add 一般会伴随 hide()和
    show(),避免布局重叠;
  • 使用 add,如果应用放在后台,或以其他方式被系统销
    毁,再打开时,hide()中引用的 fragment 会销毁,所以依
    然会出现布局重叠 bug,可以使用 replace 或使用 add
    时,添加一个 tag 参数;
4 、 getFragmentManager、 getSupportFragmentManager 、

getChildFragmentManager 之间的区别?
参考回答:

  • getFragmentManager()所得到的是所在 fragment 的 父容器
    的管理器, getChildFragmentManager()所得到的是在
    fragment 里面 子容器的管理器, 如果是 fragment 嵌套
    fragment,那么就需要利用
    getChildFragmentManager();
  • 因为 Fragment 是 3.0 Android 系统 API 版本才出现的组
    件,所以 3.0 以上系统可以直接调用
    getFragmentManager()来获取FragmentManager()对象,
    而 3.0 以下则需要调用 getSupportFragmentManager() 来
    间接获取;
5 、FragmentPagerAdapter 与 与 FragmentStatePagerAdapter 的区别与使用场景

参考回答:
相同点 : 二者都继承 PagerAdapter
不同点 : FragmentPagerAdapter 的每个 Fragment 会持久的保存在 FragmentManager 中,只要用户可以返回到页面
中,它都不会被销毁。因此适用于那些数据 相对静态的
页,Fragment 数量也比较少的那种;FragmentStatePagerAdapter 只保留当前页面,当页面不
可见时,该 Fragment 就会被消除,释放其资源。因此适用
于那些 数据动态性较大、 占用内存较多,多 Fragment 的情
况;

二、Activity
1丶说下 Activity 生命周期?

参考解答: 在正常情况下,Activity 的常用生命周期就只有如下 7 个

  • onCreate(): 表示 Activity 正在被创建,常用来 初始化工作,比
    如调用 setContentView 加载界面布局资源,初始化 Activity 所
    需数据等;
  • **onRestart():**表示 Activity 正在重新启动,一般情况下,当前
    Acitivty 从不可见重新变为可见时,OnRestart就会被调用;
  • onStart(): 表示 Activity 正在被启动,此时 Activity 可见但不
    在前台,还处于后台,无法与用户交互;
  • onResume(): 表示 Activity 获得焦点,此时 Activity 可见且在
    前台并开始活动,这是与 onStart 的区别所在;
  • onPause(): 表示 Activity 正在停止,此时可做一些 存储数据、
    停止动画等工作,但是不能太耗时,因为这会影响到新 Activity
    的显示,onPause 必须先执行完,新 Activity 的 onResume 才会
    执行;
  • onStop(): 表示 Activity 即将停止,可以做一些稍微重量级的回
    收工作,比如注销广播接收器、关闭网络连接等,同样不能太耗
    时;
  • onDestroy(): 表示 Activity 即将被销毁,这是 Activity 生命周
    期中的最后一个回调,常做 回收工作、资源释放;

延伸: 从 整个生命周期来看,onCreate 和 onDestroy 是配对的,分别标识着 Activity 的创建和销毁,并且只可能有 一次调用; 从 Activity 是否可见来说,onStart 和 onStop 是配对的,这两个方法可能被 调用多次; 从 Activity 是否在前台来说,onResume 和 onPause 是配对的,这两个方法可能被 调用多次; 除了这种区别,在实际使用中没有其他明显区别;

2 、 Activity A 启动另一个 Activity B 会调用哪些方法?如果 B 是透明主题的又或则是个 DialogActivity 呢 ?

参考解答: Activity A 启动另一个 Activity B,回调如下

  • Activity A 的 onPause() → Activity B 的 onCreate() →
    onStart() → onResume() → Activity A 的 onStop();
  • 如果 B 是透明主题又或则是个 DialogActivity,则不会回调 A 的onStop;
3 、说下 onSaveInstanceState() 方法的作用 ? ? 何时会被调用?

参考解答:

发生条件:异常情况下( 系统配置发生改变时导致 Activity被杀死并重新创建、资源内存不足导致低优先级的 Activity 被杀死)

  • 系统会调用 onSaveInstanceState 来保存当前 Activity 的状态,
    此方法调用在 onStop 之前,与 onPause 没有既定的时序关系;
  • 当 Activity 被重建后,系统会调用 onRestoreInstanceState,
    并且把 onSave(简称)方法所保存的 Bundle 对象 同时传参给
    onRestore(简称)和onCreate(),因此可以通过这两个方法判断Activity 是否被重建,调用在 onStart 之后;
4 、说下 Activity 的四种启动模式、应用场景 ?

参考回答:

  • standard 标准模式: 每次启动一个 Activity 都会重新创建一个
    新的实例,不管这个实例是否已经存在,此模式的 Activity 默认
    会进入启动它的 Activity 所属的任务栈中;
  • singleTop 栈顶复用模式: 如果新 Activity 已经位于任务栈的栈顶,那么此 Activity 不会被重新创建,同时会回调 onNewIntent方法,如果新 Activity 实例已经存在但不在栈顶,那么Activity 依然会被重新创建;
  • singleTask 栈内复用模式: 只要 Activity 在一个任务栈中存在,那么多次启动此 Activity 都不会重新创建实例,并回调
    onNewIntent 方法,此模式启动 Activity A,系统首先会寻找是
    否存在 A 想要的任务栈,如果不存在,就会重新创建一个任务
    栈,然后把创建好 A 的实例放到栈中;
  • singleInstance单实例模式: 这是一种加强的 singleTask 模
    式,具有此种模式的 Activity 只能单独地位于一个任务栈中,且
    此任务栈中只有唯一一个实例;
5 、了解哪些 Activity 常用的标记位 Flags ?

参考回答:

  • FLAG_ACTIVITY_NEW_TASK : 对应 singleTask 启动模式,其效果和在 XML 中指定该启动模式相同;
  • FLAG_ACTIVITY_SINGLE_TOP : 对应 singleTop 启动模式,其效果和在 XML 中指定该启动模式相同;
  • FLAG_ACTIVITY_CLEAR_TOP : 具有此标记位的 Activity,当它启动时,在同一个任务栈中所有位于它上面的 Activity 都要出栈。这个标记位一般会和 singleTask 模式一起出现,在这种情况下,被启动 Activity 的实例如果已经存在,那么系统就会回调onNewIntent。如果被启动的 Activity 采用 standard 模式启动,那么它以及连同它之上的 Activity 都要出栈,系统会创建新的Activity 实例并放入栈中;
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 具有这个标记的Activity 不会出现在历史 Activity 列表中;
6 、说下 Activity 跟 跟 window , view 之间的关系?

参考回答:
Activity 创建时通过 attach()初始化了一个 Window 也就是
PhoneWindow,一个 PhoneWindow 持有一个 DecorView 的实例,DecorView 本身是一个 FrameLayout,继承于 View,Activty 通过setContentView 将 xml 布局控件不断 addView()添加到 View 中,最终显示到 Window 于我们交互;

7 、横竖屏切换的 Activity 生命周期变化?

参考回答:

  • 不设置 Activity 的 android:configChanges 时,切屏会销毁当前Activity,然后重新加载调用各个生命周期,切横屏时会执行一
    次,切竖屏时会执行两次;onPause()→onStop()→onDestory()→onCreate()→onStart()→onResume()
  • 设置 Activity 的 android:configChanges=" orientation",经过
    机型测试
    • 在 Android5.1 即 即 API 3 23 级别下,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
    • 在 Android9 即 即 API 8 28 级别下,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法
    • 官方纠正后,原话如下
      如果您的应用面向 Android 2 3.2 即 即 API 级别 3 13 或更
      高级别(按照 minSdkVersion 和 targetSdkVersion)

请查看完整的PDF版

更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取

Android JNI + AIDL: 第1篇: Android JNI 编程 1. Android's JNI Android JNI编程说到底就是3个步骤,   (1) ①在需要调用本地C/C++实现的API的上层APK的编程中,先声明和引用native性质的jni的java接口,这个java接口的命名可以随意,调用和其他接口一样,声明标注public native性质 例子:   ②利用JDK 生成JNI的头文件。根据这个JNIjava接口的声明和调用,生成JN 阅读详情

相关推荐

论文分享 - OctoMap八叉树建图原理

论文:OctoMap:An Efficient Probabilistic 3D Mapping Framework Based on Octrees。

一只废佐_的博客 2539

android AIDL 进程间通信

android AIDL 完整示例,android 进程间通信完整Demo

if(...){...} 2211

【数学建模】编程手学习路线

在学习过程中,建议注重理论与实践相结合,多进行实例练习和项目实践,以巩固所学知识并提升实际应用能力。同时,保持对新技术和新方法的关注和学习,不断提升自己的专业素养和竞争力。NumPy、Pandas、Matplotlib和Seaborn等库是数据处理和可视化的重要工具。掌握常用机器学习算法的原理和应用,如决策树、支持向量机、神经网络等。学习内容包括微积分、线性方程组、矩阵运算、概率分布、统计推断等。学习内容包括基本语法、函数和模块、面向对象编程、文件操作等。深入了解优化理论和方法,如梯度下降法、牛顿法等。

2301_79586491的博客 2960

Android 使用【AIDL】调用外部服务

在Android 中有一种服务说是服务其实倒不如说是一个接口,这个接口名为:Android Interface Definition Language ,这个接口可提供跨进程访问服务,英文缩写为:AIDL。   此种服务的好处在于,多个应用程序之间建立共同的服务机制,通过AIDL在不同应用程序之间达到数据的共享和数据相互操作,下面将通过一个DEMO 演示AIDL 是如何为应用程序之间提供服务的。...

weixin_34268310的博客 238

Codex登录要手机验证码?Cockpit Tools跳过验证保姆级教程

摘要:OpenAI升级风控后,Codex登录需手机验证,增加批量账号使用成本。CockpitTools(GitHub 8.3k star)可绕过验证,支持多AI编程平台账号管理。操作步骤:1) 获取ChatGPT网页Session数据;2) 通过转换工具生成CPA格式JSON;3) 导入工具启动Codex。注意:仅适用于未绑定手机号的账号,Session会过期,且需防范数据泄露风险。商业账号通常直接提供认证文件。(150字)

5830

3D iToF深度分辨率测量

本文展示了RGB-D传感器在三维测量中的高精度表现。标靶深度图显示其具备清晰、低噪、无干扰的特性,点云数据完整度高且轮廓分明。该技术已成功应用于物流(体积测量误差<1%)、工业(高反光部件装配检测)和农业(果蔬成熟度分级)等领域,验证了其硬件和算法的可靠性,能够满足不同场景下的三维测量需求。

dream it possible 252

android最新版本!抖音四面被拒,再战头条终获offer,附赠课程+题库

什么是中年危机 根据权威数据显示,国内IT程序员鼎盛时期是在25-27岁左右,30岁对于程序员而言完全是一个38线,接着就是转业转岗的事情,这一点在业界也算是一个共识了。 大学毕业步入IT行业普遍年龄也是在22岁左右,然而22-30岁之间也就是8年左右的时间,那么27岁也就是职业生涯“中年”的开始,那么作为程序员的你有准备好如何度过“中年危机”吗? 当程序猿到了28岁左右的“中年危机”就不一样了,这个年纪也是程序猿们工作积累的高峰期,有的程序猿已经换了好几份工作,也有的程序猿们一直在一家企业做了好几个大型项

CHAMPION8888的博客 1360

Yolov8-pose关键点检测:训练实战篇 | 手部关键点检测

yolo8-pose实战检测手部关键点并优化。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 3395

android AIDL使用的小例子

本文提供了一个关于AIDL使用的简单易懂的例子,分为客户端和服务端两部分,分别为客户端和服务端新建一个eclipse工程,实现了从客户端向服务端发送请求,服务端打印log的功能。 我的理解: 进程间的通信 ,让服务器作出反应(大概就是这个意思)   客户端和服务端的源码结构如下: 注意,由于客户端和服务端的aidl文件所在包名必须一样,而两个包名一样的程序在安装时会

FireAny2010的专栏 1200

MicroCap声学仿真介绍(二)-创建声学仿真元件

声学库里包含孔、管、障板辐射器等器件,我们只需要按照仿真的需求,将声学库里的器件排列好,输入参数,用线连接起来即可。这里我们用D指代孔的直径,L指代孔的长度,N代表孔的数量。26.在弹出的界面中做如下设置:需要先在右面的选框里找到对应的项,然后右键Add Part,再之后就如下设置。3.在弹出的界面中,选择“Macro file(.mac)”,并点击右上角的“OK”下面就以声学仿真中常见的“孔”来做示例,跟大家一块演示一下宏程序的新建。10.在上图中“Value”中填入“R”,然后点击左边的“OK”按钮;

山无忧的博客 2197

EtherCAT ROS2 入门教程(一)

本文介绍了EtherCAT驱动与ROS2的集成方案,主要包括三部分内容:1)在Ubuntu 22.04上安装IgH EtherCAT主站的详细步骤,包括内核配置、源码编译和网络适配器设置;2)构建ethercat_driver_ros2,通过ros2_control描述文件配置硬件接口和EtherCAT从站模块插件;3)使用方法,包括启动EtherCAT主站和运行配置包。该方案支持通过参数文件定义硬件接口,并提供通用和专用两种EtherCAT模块插件,便于开发基于EtherCAT的工业应用。

机器人控制与仿真应用 1528

阿里Andorid研发一面:小姑娘挺不错来给我先讲讲Fragment和Activity相关吧(1)

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

2301_82243828的博客 659

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[Android AIDL系列 1] 手动编译aidl文件,生成Java、C++[android]、C++[ndk]、Rust接口

AIDL文件在Android系统上应用广泛,和底层的Binder机制紧密关联。在Android源码或者Android Studio中通常是自动编译aidl文件,生成对应语言的接口文件。做应用层Java开发,aidl和binder封装的比较“干净”,不用太多的涉及binder的调用细节,也不用太关心aidl的编译过程。如果是做中下层开发,包括framework、native层开发,可能需要编写native service,有必要理解binder的底层机制。先从编译aidl开始。

yinminsumeng的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

AIDL的简单使用

第一、定义AIDL文件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // IRemoteService.aidl package com.example.android;   // De

zdf091119的博客 374

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android12之源码手动生成aidl对应java/cpp/ndk/rust服务(一百五十三)

本篇目的:在android源码中手动生成aidl对应的java/cpp/ndk/rust语言的binder服务。

Android系统攻城狮 2099

AIDL使用详解(一)

AIDL aidl的机制实际上是android提供的一个简化的Ipc工具。让开发者更轻易进行ipc通信。本文主要介绍在android studio上如何使用AIDL,适合初学者。(android studio) 创建AIDL文件 在project面板中选择右击new file-> aidl file即可,系统自动生成指定文件名的aidl文件。生成的文件代码如下: package j.nes.co

路漫漫,反复求索。 443

AIDL 生成 cpp文件

AIDL 生成 cpp文件

manshq163com的专栏 1103

aidl文件生成Java、C++[android]、C++[ndk]、Rust接口

aidl文件生成Java、C++[android]、C++[ndk]、Rust接口

似霰的博客 3222

Android aidl 工具使用

o和-h参数分别指定.cpp文件和.h文件输出的路径。PS:如果设置参数ndk,生成的文件可以不依赖Android源码。1.aidl 工具在sdk中路径:~/Android/Sdk/build-tools/33.0.0-rc2/2.IIpcServiceListener.aidl文件。C++接口文件比较多,一个aidl文件生成4个文件。3.-I DIR, --include=DIR import搜索路径,指定依赖的aidl文件所在目录。查看生成的头文件和cpp文件 1。查看生成的java文件1。

kk3087961的博客 1332

NDK、jni、Binder、AIDL、进程通信有关

1,请介绍一下NDK2,什么是NDK库?3,jni用过吗?4,如何在jni中注册native函数,有几种注册方式?5,Java 如何调用c、c++语言?6,jni如何调用java 层代码7,进程间通信的方式8,Binder机制9,简述IPC?10,什么是AIDL?11,AIDL解决了什么问题?12,AIDL如何使用?13,Android上的Inter-Process-Communication跨进...

fajuary的专栏 2094

Android中AIDL的使用步骤、传递对象以及各部分代码的执行线程

AIDL (Android Interface Definition Language 接口定义语言)是一种IDL 语言,用于在两个进程(两个应用)之间进行进程间通信(IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL的方式实现AIDL传输数据支持: Java基本数据类型,String、CharSequence,List、M

刘运召的博客 4227

aidl命令

aidl命令使用简介使用方法特别注意 简介 aidl命令做为android编译阶段中使用的命令,负责将aidl文件转化为java文件 使用方法 $ source … && lunch … 如上命令后,使用aidl --help 如下讯息 usage: aidl --lang={java|cpp|ndk} [OPTION]... INPUT... Generate Java or C++ files for AIDL file(s). ... OPTION: -I DIR, --i

Zpeg的博客 1544
上一篇: 把面试官唬住了,就要50K。没唬住,就要5K!Android开发社招面试
下一篇: 不知庐山真面目只缘身在此山中,讲解一下Handler
初壹十五a
博客等级 码龄8年 146粉丝 257原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值