### Android面试题解析
#### 一、Java单例设计模式
在Java编程中,单例设计模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。单例模式可以分为懒汉式和饿汉式两种实现方式。
##### 1. 懒汉式(线程不安全)
```java
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
这种实现方式简单易懂,但在多线程环境下可能会出现问题,当多个线程同时执行`getInstance()`方法时,可能创建出多个实例。
##### 2. 懒汉式(线程安全)
```java
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
通过添加`synchronized`关键字来保证线程安全,但每次调用`getInstance()`都会进行同步操作,这会影响性能。
##### 3. 饿汉式
```java
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
```
这种方式在类加载时就完成了实例化,避免了线程同步问题,但是无法保证延迟加载。
##### 4. 双重检查锁定(DCL)模式
```java
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
```
双重检查锁定模式是线程安全的懒加载实现方式,既保证了线程安全又兼顾了效率。使用`volatile`关键字确保了多个线程下的正确性。
#### 二、Activity生命周期流程图
在Android开发中,理解Activity生命周期对于处理各种事件非常重要。Activity的生命周期包括以下几个关键阶段:
1. **启动阶段**:
- `onCreate()`:Activity第一次创建时被调用。
- `onStart()`:Activity变为可见时调用。
- `onResume()`:Activity获取焦点并可以与用户交互时调用。
2. **暂停阶段**:
- `onPause()`:Activity失去焦点但仍可见时调用。
3. **停止阶段**:
- `onStop()`:Activity完全不可见时调用。
4. **销毁阶段**:
- `onDestroy()`:Activity被销毁前调用。
5. **重新启动阶段**:
- `onRestart()`:Activity从停止状态恢复到启动状态时调用。
- `onStart()`:再次变为可见时调用。
- `onResume()`:再次获取焦点并可以与用户交互时调用。
#### Activity生命周期流程图示例
```mermaid
graph TD
A[onCreate] --> B(onStart)
B --> C(onResume)
C --> D(onPause)
D --> E(onStop)
D --> C
E --> F(onRestart)
F --> B
B --> C
C --> Z(onDestroy)
E --> Z
```
通过以上流程图可以看出,Activity在不同状态间的转换以及每个回调函数的作用。开发者可以根据这些回调函数来处理不同的逻辑,例如保存或恢复状态等。
---
总结来说,在准备Android面试时,理解单例设计模式的实现方式及其优缺点是非常重要的。此外,掌握Activity生命周期的不同阶段及对应的回调方法也是必须的技能之一。通过深入学习这些基础知识,可以帮助开发者更好地理解和应对实际开发中的问题。