android 基础面试题
时间: 2025-02-24 11:33:01 浏览: 29
### Android 基础面试题及答案
#### Activity 生命周期是什么?
Activity 的生命周期是指从创建到销毁过程中经历的不同状态。理解这些状态对于管理应用资源至关重要。以下是主要的状态:
- **onCreate()**: 当活动第一次被初始化时调用。通常用于设置视图、绑定数据以及执行其他初始操作。
- **onStart()**: 活动变得可见给用户,但可能还没有获得焦点。
- **onResume()**: 活动开始与用户交互,此时它处于前台并接收事件。
- **onPause()**: 另一个活动已经获取了输入焦点,当前活动即将失去焦点但仍保持大部分状态不变;这是一个保存任何持久化数据的好时机。
- **onStop()**: 活动不再对用户可见,可以释放更多内存和其他资源。
- **onRestart()**: 如果该活动由 onStop 转变为重新启动,则会触发此方法,在 onStart 之前调用。
- **onDestroy()**: 这是最后一个回调函数,表示活动正在关闭。
了解如何处理不同状态下应采取的动作有助于构建更加健壮的应用程序[^2]。
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart(){
super.onStart();
// 处理当activity变成可见的时候要做的事情
}
@Override
protected void onResume(){
super.onResume();
// 用户现在可以看到并且能跟这个activity互动了
}
```
#### Intent 是什么及其用途有哪些?
Intent 对象用来描述应用程序之间的消息传递意图。它可以携带动作名称、类别信息以及其他参数。Intents 主要有两种形式:显式 Intents 和隐式 Intents。
- 显式 Intents 直接指定了目标组件的名字(通常是另一个 activity 或者 service)。这常用于内部通信,比如在一个 app 中打开新的页面。
- 隐式 Intents 不指定具体的接收方而是通过 action 类型或其他属性匹配合适的接收器。这类 intent 更适用于跨应用间的协作,例如发送邮件或分享图片等场景。
使用 `startActivity()` 方法可启动一个新的 activity 实例,并传入相应的 intent 参数作为配置选项[^1]。
```java
// 创建一个显示的intent实例
Intent explicitIntent = new Intent(this, TargetActivity.class);
// 启动target activity
startActivity(explicitIntent);
// 创建一个隐式的intent实例
Intent implicitIntent = new Intent(Intent.ACTION_SEND);
implicitIntent.setType("text/plain");
implicitIntent.putExtra(Intent.EXTRA_TEXT,"Hello World");
if (implicitIntent.resolveActivity(getPackageManager()) != null){
startActivity(implicitIntent);
} else{
Toast.makeText(this,"No App Available",Toast.LENGTH_SHORT).show();
}
```
#### Service 和 Broadcast Receiver 的区别在哪里?
Service 组件运行于后台进程中,主要用于长时间执行的任务而不依赖 UI 界面的存在与否。广播接收器则监听来自系统或者其他应用程序发出的消息/事件通知,并作出响应。两者的主要差异如下表所示:
| 特征 | Services | Broadcast Receivers |
|--------------------|-----------------------------------|------------------------------|
| 执行环境 | 后台线程 | 应用上下文中 |
| 使用目的 | 执行耗时较长的操作 | 接收和分发广播消息 |
| 生命周期控制 | 自定义 | 系统自动管理 |
服务可以通过 startService() 来激活,而广播接受者则是注册特定类型的广播过滤条件之后等待相应事件的发生[^4]。
```xml
<!-- 在AndroidManifest.xml文件中声明service -->
<service android:name=".MyBackgroundService"></service>
<!-- 注册broadcast receiver -->
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
```
阅读全文
相关推荐

















