Android 面试之必问Android基础(1),致Android开发者

2.3 与Activity传递数据

2.3.1 Fragment向Activity传递数据

首先,在Fragment中定义接口,并让Activity实现该接口,如下所示。

public interface OnFragmentInteractionListener {

void onItemClick(String str);

}

复制代码

然后,在Fragment的onAttach()中,将参数Context强转为OnFragmentInteractionListener对象传递过去。

public void onAttach(Context context) {

super.onAttach(context);

if (context instanceof OnFragmentInteractionListener) {

mListener = (OnFragmentInteractionListener) context;

} else {

throw new RuntimeException(context.toString()

  • " must implement OnFragmentInteractionListener");

}

}

复制代码

2.3.2 Activity向Fragment传递数据

在创建Fragment的时候,可以通过setArguments(Bundle bundle)方式将值传递给Activity,如下所示。

public static Fragment newInstance(String str) {

FragmentTest fragment = new FragmentTest();

Bundle bundle = new Bundle();

bundle.putString(ARG_PARAM, str);

fragment.setArguments(bundle);//设置参数

return fragment;

}

复制代码

3, Service


3.1 启动方式

Service的启动方式主要有两种,分别是startService和bindService。

其中,StartService使用的是同一个Service,因此onStart()会执行多次,onCreate()只执行一次,onStartCommand()也会执行多次。使用bindService启动时,onCreate()与onBind()都只会调用一次。

使用startService启动时是单独开一个服务,与Activity没有任何关系,而bindService方式启动时,Service会和Activity进行绑定,当对应的activity销毁时,对应的Service也会销毁。

3.2 生命周期

下图是startService和bindService两种方式启动Service的示意图。 在这里插入图片描述

3.2.1 startService
  • onCreate():如果service没被创建过,调用startService()后会执行onCreate()回调;如果service已处于运行中,调用startService()不会执行onCreate()方法。

  • onStartCommand():多次执行了Context的startService()方法,那么Service的onStartCommand()方法也会相应的多次调用。

  • onBind():Service中的onBind()方法是抽象方法,Service类本身就是抽象类,所以onBind()方法是必须重写的,即使我们用不到。

onDestory():在销毁Service的时候该方法。

public class TestOneService extends Service{

@Override

public void onCreate() {

Log.i(“Kathy”,"onCreate - Thread ID = " + Thread.currentThread().getId());

super.onCreate();

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

Log.i(“Kathy”, "onStartCommand - startId = " + s

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

tartId + ", Thread ID = " + Thread.currentThread().getId());

return super.onStartCommand(intent, flags, startId);

}

@Nullable

@Override

public IBinder onBind(Intent intent) {

Log.i(“Kathy”, "onBind - Thread ID = " + Thread.currentThread().getId());

return null;

}

@Override

public void onDestroy() {

Log.i(“Kathy”, "onDestroy - Thread ID = " + Thread.currentThread().getId());

super.onDestroy();

}

}

复制代码

3.2.2 bindService

bindService启动的服务和调用者之间是典型的Client-Server模式。调用者是client,Service则是Server端。Service只有一个,但绑定到Service上面的Client可以有一个或很多个。bindService启动服务的生命周期与其绑定的client息息相关。

1,首先,在Service的onBind()方法中返回IBinder类型的实例。 2,onBInd()方法返回的IBinder的实例需要能够返回Service实例本身。

3.3 Service不被杀死

现在,由于系统API的限制,一些常见的不被杀死Service方式已经过时,比如下面是之前的一些方式。

3.3.1, onStartCommand方式中,返回START_STICKY。

调用Context.startService方式启动Service时,如果Android面临内存匮乏,可能会销毁当前运行的Service,待内存充足时可以重建Service。而Service被Android系统强制销毁并再次重建的行为依赖于Service的onStartCommand()方法的返回值,常见的返回值有如下一些。

START_NOT_STICKY:如果返回START_NOT_STICKY,表示当Service运行的进程被Android系统强制杀掉之后,不会重新创建该Service。 START_STICKY:如果返回START_STICKY,表示Service运行的进程被Android系统强制杀掉之后,Android系统会将该Service依然设置为started状态(即运行状态),但是不再保存onStartCommand方法传入的intent对象,即获取不到intent的相关信息。 START_REDELIVER_INTENT:如果返回START_REDELIVER_INTENT,表示Service运行的进程被Android系统强制杀掉之后,与返回START_STICKY的情况类似,Android系统会将再次重新创建该Service,并执行onStartCommand回调方法,但是不同的是,Android系统会再次将Service在被杀掉之前最后一次传入onStartCommand方法中的Intent再次保留下来并再次传入到重新创建后的Service的onStartCommand方法中,这样我们就能读取到intent参数。

4, BroadcastReceiver


4.1 BroadcastReceiver是什么

BroadcastReceiver,广播接收者,它是一个系统全局的监听器,用于监听系统全局的Broadcast消息,所以它可以很方便的进行系统组件之间的通信。BroadcastReceiver属于系统级的监听器,它拥有自己的进程,只要存在与之匹配的Broadcast被以Intent的形式发送出来,BroadcastReceiver就会被激活。

和其他的四大组件一样,BroadcastReceiver也有自己独立的声明周期,但是它又和Activity、Service不同。当在系统注册一个BroadcastReceiver之后,每次系统以一个Intent的形式发布Broadcast的时候,系统都会创建与之对应的BroadcastReceiver广播接收者实例,并自动触发它的onReceive()方法,当onReceive()方法被执行完成之后,BroadcastReceiver的实例就会被销毁。

从不同的纬度区分,BroadcastReceiver可以分为不同的类别。

  • 系统广播/非系统广播

  • 全局广播/本地广播

  • 无序广播/有序广播/粘性广播

更多Android知识点分享


架构师筑基必备技能

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。

知识要点:

1、深入理解Java泛型

2、注解深入浅出

3、并发编程

4、数据传输与序列化

5、Java虚拟机原理

6、高效IO

设计思想解读开源框架

随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。

所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。

知识要点:

1、热修复设计

2、插件化框架设计

3、组件化框架设计

4、图片加载框架

5、网络访问框架设计

6、RXJava响应式编程框架设计

360°全方位性能调优

在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。

另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。

1、设计思想与代码质量优化

2、程序性能优化

  • 启动速度与执行效率优化

  • 布局检测与优化

  • 内存优化

  • 耗电优化

  • 网络传输与数据储存优化

  • APK大小优化

3、开发效率优化

  • 分布式版本控制系统Git

  • 自动化构建系统Gradle

4、项目实战

  • 启动速度

  • 流畅度

  • 抖音在APK包大小资源优化的实践

  • 优酷响应式布局技术全解析

  • 网络优化

  • 手机淘宝双十一性能优化项目揭秘

  • 高德APP全链路源码依赖分析

  • 彻底干掉OOM的实战经验分享

  • 微信Android终端内存优化实践

  • Android框架体系架构

Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。

Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。

本篇知识要点:

1、高级UI晋升

2、Android内核组件

3、大型项目必备IPC

4、数据持久与序列化

5、Framework内核解析

  • NDK模块开发(音视频系列)

NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C++ 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。

在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C++的动态库,并能自动将so和Java应用一起打包成apk。

本篇知识要点:

1、NDK开发之C/C++入门

2、JNI模块开发

3、Linux编程

4、底层图片处理

5、音视频开发

6、机器学习

  • Flutter学习进阶

2019 年无疑是 Flutter 技术如火如荼发展的一年。

每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。

本篇知识要点:

1、Flutter跨平台开发概述

2、Windows中Flutter开发环境搭建

3、编写你的第一个Flutter APP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2022中高级android面试必知百题.pdf 是一份面向中高级 Android 开发岗位的面试必备题库。这份题库涵盖了Android开发的各个方面,包括Java基础Android框架、网络通信、数据存储、性能优化、设计模式等等。对于准备面试开发者来说,掌握这些题目的答案是非常重要的。 在面对这份题库时,首先建议开发者系统地学习Android开发的基础知识和常用框架,了解Android的生命周期、四大组件、UI布局、事件处理等基本概念和技能。其次,重点关注题库中涉及的一些热门话题,例如Kotlin语言、Jetpack组件、Retrofit网络库、GreenDAO数据库等。此外,还应该学习一些面试常见的设计模式和算法题,这有助于提高自己在面试中的答题能力和应变能力。 对于每个题目,建议开发者认真思考,并提前编写一些简单的代码示例来验证自己的思路。在面试时,可以将这些代码示例作为参考,并结合自己的实际经验进行回答。此外,面试中的沟通能力也是非常重要的,要学会清晰地表达自己的想法,并与面试官积极互动,展示自己的学习能力和团队合作精神。 总之,通过认真学习和准备,对于2022中高级android面试必知百题.pdf中的题做到心中有数,并能够自信地回答,将会给开发者面试中带来更大的成功机会。 ### 回答2: 《2022中高级android面试必知百题.pdf》是一本面向中高级Android开发者面试题集合。该文档包含了一些常见的、涉及到Android开发领域的面试题,旨在帮助面试者更好地准备面试。 该文档中的题可以按照不同的主题进行分类,例如Android基础知识、Java编程、Android框架、网络通信、多线程编程、内存管理、性能优化、常见的设计模式等等。通过这些题的答题,面试者可以进一步巩固自己的技术知识,提升解决题的能力。 面试题的类型各不相同,有些题是理论性的,需要候选者对基本概念和原则有清楚的了解。还有一些题是针对实践经验和项目经验的,考察面试者在实际开发中的题处理和解决能力。此外,还有一些题目是需要面试者进行编码实现,考察其编程能力和代码质量。 如何有效准备这些面试题是非常重要的。可以通过查阅相关书籍、博客和官方文档深入学习和理解,结合实际项目经验进行思考和实践,还可以参加一些线上或线下的技术交流活动,与其他开发者进行经验分享和学习。 总之,《2022中高级android面试必知百题.pdf》是一本面试前准备的良好参考资料,帮助面试者巩固知识、提升能力、在面试中更加从容自信地回答题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值