Android 面试

1. java中的弱引用,软引用,虚引用

2. JNI中怎么调用android的framework的api

3. Atomic Integer a和 volatile int a;的区别

4. Activity的各种启动模式

5. Handler的原理

6. touch事件的处理流程,各个回调的调用关系

7. layout和meauser机制


1. java中的弱引用,软引用,虚引用

   http://blog.youkuaiyun.com/ocean181/article/details/7232759

2. JNI中怎么调用android的framework的api

  http://blog.youkuaiyun.com/itachi85/article/details/8532977


3. Atomic Integer a和 volatile int a;的区别

    首先看看 volatile和synchronized 的区别:http://blog.youkuaiyun.com/hbbdxs/article/details/18964647; AutomicReference主要是用了volatile和Unsafe.compareAndSwapObject()来分别保证可见性和原子性. http://www.dewen.org/q/9588


附:独占写文件的5中方法

http://www.oschina.net/code/snippet_111708_17139


4. Activity的各种启动模式

    

[1] standard 模式

     这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。

[2] singleTop 模式

     如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。

[3] singleTask 模式

     如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

[4] singleInstance 模式

     在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。

设置启动模式的位置在 AndroidManifest.xml 文件中 Activity 元素的 android:launchMode 属性。


5. Handler的原理

    http://blog.youkuaiyun.com/stonecao/article/details/6417364

6. touch事件的处理流程,各个回调的调用关系

    http://blog.youkuaiyun.com/stonecao/article/details/6759189

7. layout和meauser机制

http://www.360doc.com/content/10/0205/01/155970_15165380.shtml


    

### Android 开发面试常见问题及答案 #### 1. **什么是 Activity?** Activity 是 Android 应用程序中的核心组件之一,用于提供用户界面并与用户进行交互。它是 Android 构造块中最基础的部分,负责维护各个界面状态并妥善管理其生命周期和跳转逻辑[^1]。 --- #### 2. **Fragment 和 Activity 的区别及其使用场景是什么?** - **Fragment** 是一种可以在 Activity 中嵌套使用的 UI 片段,具有独立的布局和行为能力。它可以被用来构建更加模块化的界面设计。 - 使用场景上,Fragment 更适合动态调整界面结构的需求,尤其是在平板设备或多窗格布局中表现优异。 - Fragment 的主要优点在于提供了更灵活的界面管理和更高的可重用性[^2]。 --- #### 3. **Android 的四大组件分别是什么?** Android 的四大组件分别是: - **Activity**: 负责显示用户界面并与用户交互。 - **Service**: 运行在后台的任务处理单元,不依赖于任何特定的用户界面。 - **BroadcastReceiver**: 用于接收广播消息并对这些事件作出响应。 - **ContentProvider**: 提供了一种机制来共享数据,允许不同应用之间交换信息。 --- #### 4. **如何通过 SQLiteOpenHelper 创建数据库并管理版本?** `SQLiteOpenHelper` 类可以通过 `onCreate()` 方法创建一个新的数据库实例,并通过 `onUpgrade()` 方法实现数据库升级功能。开发者可以根据需求定义表结构以及更新策略。具体方法如下所示: ```java public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "my_database.db"; private static final int VERSION = 1; public MyDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 执行 SQL 初始化语句 db.execSQL("CREATE TABLE IF NOT EXISTS my_table (...)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion != newVersion) { // 升级逻辑 db.execSQL("DROP TABLE IF EXISTS my_table"); onCreate(db); // 可重新调用 onCreate() 或者自定义其他方式 } } } ``` 上述代码展示了如何利用 `SQLiteOpenHelper` 来生成数据库文件并对其进行版本控制[^3]。 --- #### 5. **信号量的作用是什么?** 信号量是一种同步工具,主要用于协调多个线程之间的访问权限。它不仅可以实现互斥操作(即一次只允许一个线程进入临界区),还可以指定同时处于临界区的最大线程数量。如果设置最大值为 1,则该信号量表现为典型的互斥锁[^4]。 --- #### 6. **Handler 和 Looper 的作用是什么?** - **Looper**: 它是一个循环器对象,在主线程或其他线程中运行一个消息队列。每个线程最多只能有一个 Looper 实例。 - **Handler**: 主要职责是向消息队列发送消息或将任务提交到目标线程执行。通常配合 Looper 工作以完成异步通信任务。 以下是简单的 Handler 示例代码片段: ```java new Thread(() -> { Looper.prepare(); // 准备当前线程的消息循环环境 Handler handler = new Handler(); handler.postDelayed(() -> Log.d("TAG", "This runs after delay"), 1000); Looper.loop(); // 启动消息循环 }).start(); ``` --- #### 7. **RecyclerView 和 ListView 的差异有哪些?** 虽然两者都支持列表项展示的功能,但 RecyclerView 在性能优化方面更为突出。它的优势体现在以下几个方面: - 改进了 ViewHolder 模式的实现细节; - 提供了 ItemAnimator 动画效果的支持; - 易扩展性强,便于定制复杂的布局样式。 --- ### 总结 以上列举了一些常见的 Android 面试题目及相关解答要点。对于求职者而言,熟悉理论知识的同时还需要注重实际项目经验积累,这样才能更好地应对技术挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值