以下是重构后的内容,保持了段落结构:

前言

2023年已经到来,但计算机的寒冬似乎还没有过去。然而,我们程序员的热情却不会因此而消退。在这个金三银四的季节,许多公司都发布了更多的招聘岗位和面试机会,因此我们需要抓住这个机会。以下是一些面试题目分享给大家,希望能帮助大家找到一份好工作。

1. Android与服务器交互的方式中的对称加密和非对称加密是什么?

对称加密是指加密和解密数据都使用相同的密钥,例如DES算法。非对称加密则是指加密和解密使用不同的密钥。在发送数据之前,需要先与服务器端约定生成公钥和私钥。使用公钥加密的数据可以使用私钥解密,反之亦然。SSH和SSL都是典型的非对称加密应用。

2. Android启动Service的两种方式是什么?它们的适用情况是什么?

如果后台服务开始后基本可以独立运行的话,可以使用startService。例如音乐播放器就可以这样用。它们会一直运行直到你调用stopSelf或者stopService。你可以通过发送Intent或者接收Intent来与正在运行的后台服务通信,但大部分时间,你只是启动服务并让它独立运行。如果你需要与后台服务通过一个持续的连接来比较频繁地通信,建议使用bind()。比如你需要定位服务不停地把更新后的地理位置传给UI。Binder比Intent开发起来复杂一些,但如果真的需要,你也只能使用它。

startService:生命周期与调用者不同。启动后若调用者未调用stopService而直接退出,Service仍会运行

bindService:生命周期与调用者绑定,调用者一旦退出,Service就会调用unBind->onDestroy

3. 谈谈你对Binder机制的理解?

Binder是一种IPC(进程间通信)机制,用于进程间通信的一种工具。在Java层中可以使用aidl工具来实现相应的接口。

4. Android中进程间通信有哪些实现方式?

Intent、Binder(AIDL)、Messenger、BroadcastReceiver

5. 介绍下实现一个自定义view的基本流程?

1、自定义View的属性编写attr.xml文件

2、在layout布局文件中引用,同时引用命名空间

3、在View的构造方法中获得我们自定义的属性 ,在自定义控件中进行读取(构造方法拿到attr.xml文件值)

4、重写onMeasure

您好,Android多进程的应用场景有很多,例如:

- **常驻后台任务应用** - 对于音乐播放器、跑步健身应用或手机管家等需要长时间在后台运行的服务,可以将这些服务单独放到一个进程中,以避免被系统回收。

- **网络请求** - 对于一些需要频繁访问网络或者需要大量计算的任务,可以将其放到一个进程中,以避免影响主线程的流畅性。

- **数据存储** - 对于一些需要长时间保存数据或者需要加密保护的数据,可以将其放到一个进程中,以避免被其他应用程序篡改或者删除。

多进程的好处有以下几点:

1. 享受更多的资源。每一个进程能够使用的系统资源都是有限制的,而多进程可以更好地利用系统资源。

2. 进程保活几率提升。将自身拆成多个进程,能够在整体上一定程度提高存活的概率。

3. 即使主进程退出了,子进程仍然可以继续工作。

要想知道如何使用多进程,先要知道Android里的多进程概念。一般情况下,一个应用程序就是一个进程,这个进程名称就是应用程序包名。我们知道进程是系统分配资源和调度的基本单位,所以每个进程都有自己独立的资源和内存空间,别的进程是不能任意访问其他进程的内存和资源的。

那如何让自己的应用拥有多个进程?很简单,我们的四大组件在AndroidManifest文件中注册的时候,有个属性是android:process。这里可以指定组件所处的进程。默认就是应用的主进程。指定为别的进程之后,系统在启动这个组件时,就先创建(如果还没创建)这个进程,然后再创建该组件。你可以重载Application类的onCreate方法,打印出它的进程名称,就可以清楚地看见了。

在设置android:process属性时,需要注意:如果是android:process=”:deamon”,以:开头的名字表示这是一个应用程序的私有进程;否则它是一个全局进程。私有进程的进程名称会在冒号前自动加上包名;而全局进程则不会。一般我们都是有私有进程,很少使用全局进程。他们的具体区别不知道有没有谁能补充一下。

使用多进程显而易见的好处就是分担主进程的内存压力。我们的应用越做越大,内存越来越多,将一些独立的组件放到不同的进程中,它们就不再占用主进程的内存空间了。当然还有其他好处。有心人会发现Android后台进程里有很多应用是多个进程的。因为它们要常驻后台。特别是即时通讯或者社交应用现在已经很常见了。典型用法是在启动一个不可见的轻量级私有进程,在后台收发消息、做一些耗时的事情、开机启动这个进程并做监听等。还有就是防止主进程被杀守护进程和主进程之间相互监视,有一方被杀就重新启动它。应该还有其他好处,这里就不多说了。

坏处则是多占用了系统的空间。大家都这么用的话系统内存很容易占满而导致卡顿。消耗用户的电量。应用程序架构会变复杂,因为需要处理多进程之间的通信。这里又是另外一个问题了。

11. Android下解决滑动冲突的常见思路是什么?相关的滑动组件需要重写onInterceptTouchEvent()方法并根据xy值决定是否要拦截当前操作。

12. 如何把一个应用设置为系统应用?

Android内存泄漏是指进程中某些对象(垃圾对象)已经没有使用价值了,但是它们却可以直接或间接地引用到gc roots导致无法被GC回收。无用的对象占据着内存空间,使得实际可使用内存变小,形象地说法就是内存泄漏了。常见的内存泄漏场景包括:类的静态变量持有大数据对象、静态变量长期维持到大数据对象的引用、非静态内部类的静态实例、非静态内部类会维持一个到外部类实例的引用、资源对象未关闭、注册对象未反注册、Handler临时性内存泄露等 。

如果您需要更多关于Android内存泄漏的信息,可以参考以下文章:

. BroadcastReceiver:广播接收器是一种在Android系统中用于接收系统广播的组件。它可以在应用程序中注册,以便在接收到特定类型的广播时执行特定的操作。

4. sp频繁操作会有什么后果?sp能存多少数据?

sp(SharedPreferences)是一种轻量级的存储方式,主要用于存储简单的配置信息和键值对。然而,频繁地读写sp可能会导致性能下降,因为它需要频繁地与底层文件系统进行交互。至于sp能存多少数据,这取决于设备的可用内存大小。一般来说,sp可以存储数百万甚至数十亿的数据。

5. dvm与jvm的区别

DVM(Dalvik虚拟机)是Android系统自带的一种虚拟机,用于运行安卓应用。而JVM(Java虚拟机)是一种广泛使用的跨平台虚拟机,不仅支持Android,还支持许多其他平台。主要区别在于它们运行的应用语言和实现细节。

6. ART

ART(Android运行时)是Google推出的一个新的、更高效的运行时环境,用于替换旧的Dalvik虚拟机。ART的主要优点是可以减少应用的启动时间和内存占用,提高应用性能。

7. Activity的生命周期

Activity的生命周期包括以下阶段:onCreate、onStart、onResume、onPause、onStop、onDestroy。每个阶段都有相应的回调方法,开发者可以在这些方法中执行特定操作。

8. Application能不能启动Activity

是的,Application可以启动Activity。通常情况下,我们会在Application的onCreate方法中启动一个默认的Activity作为应用的入口。

9. Activity的状态都有哪些

Activity的状态包括:新建(New)、可见(Visible)、活动(Active)、暂停(Paused)和停止(Stopped)。这些状态对应于Activity生命周期中的各个阶段。

10. 横竖屏切换时Activity的生命周期****Activity的状态都有哪些

当设备从横屏切换到竖屏或从竖屏切换到横屏时,Activity的生命周期不会发生变化。但是,如果用户主动旋转设备,Activity的状态将从活动中变为暂停状态,然后恢复活动状态。同样,如果用户关闭屏幕或按下返回键,Activity的状态也会从活动中变为暂停状态。此外,如果设备进入无界面模式,如休眠或关机,Activity的状态将变为永久停止状态。

11. 如何设置activity成窗口样式

要将activity设置为窗口样式,需要在AndroidManifest.xml文件中为对应的activity添加以下属性:android:theme="@style/Theme.AppCompat.Light"。然后,在res/values/styles.xml文件中定义窗口样式: 最后,在activity的onCreate方法中设置主题:getWindow().setContentView(R.layout.activity_main); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setHomeButtonEnabled(true);