Lang:简体中文

activiy面试题

日期:2025-09-08 / 来源:面试宝典

掌握activity面试要点,轻松应对挑战

在android开发的面试中,activity相关的问题是常考内容。下面为大家详细介绍一些常见的activity面试题。

activity生命周期相关问题

这是activity面试中最基础也最常考的部分。例如,会问到activity完整的生命周期包含哪些方法。答案是包含oncreate、onstart、onresume、onpause、onstop、ondestroy,还有一个onrestart。面试官可能还会进一步提问,当一个activity a启动另一个activity b时,a和b的生命周期方法调用顺序是怎样的。以常见的情况来说,a会先调用onpause,然后b依次调用oncreate、onstart、onresume,最后a调用onstop。比如在一个新闻类app中,用户在新闻列表页(activity a)点击某条新闻进入详情页(activity b),就会触发这样的生命周期调用。

activity启动模式问题

activity有四种启动模式,分别是standard、singletop、singletask和singleinstance。面试中会问每种启动模式的特点和使用场景。standard是默认模式,每次启动都会创建一个新的activity实例。singletop模式下,如果activity已经位于栈顶,再次启动时不会创建新实例,而是调用onnewintent方法。比如浏览器的搜索结果页,如果用户在搜索结果页再次进行搜索,就可以使用singletop模式避免重复创建页面。singletask模式会检查栈中是否存在该activity实例,如果存在则将其上面的activity都出栈,使其位于栈顶。像app的主界面就可以使用singletask模式,确保只有一个主界面实例。singleinstance模式会为该activity创建一个单独的任务栈,保证其唯一性。例如系统的来电界面,就使用了singleinstance模式。

activity之间的数据传递问题

面试官会问如何在不同的activity之间传递数据。常见的方法是使用intent。可以通过putextra方法将数据添加到intent中,然后在目标activity中使用getxxxextra方法获取数据。例如,在一个购物app中,从商品列表页(activity a)传递商品的id到商品详情页(activity b),可以这样实现:在activity a中,intent intent = new intent(this, activityb.class); intent.putextra("productid", 123); startactivity(intent); 在activity b中,int productid = getintent().getintextra("productid", 0); 此外,还可以使用bundle来传递复杂的数据对象,需要让对象实现serializable或parcelable接口。

activity的横竖屏切换问题

当屏幕横竖屏切换时,activity会重新创建。面试中会问如何避免这种情况。一种方法是在androidmanifest.xml文件中为activity添加android:configchanges="orientation|screensize"属性,这样当屏幕横竖屏切换时,activity不会重新创建,而是调用onconfigurationchanged方法。例如,在一个视频播放app中,如果用户在观看视频时横竖屏切换,使用这种方法可以避免视频重新加载。另一种方法是在onsaveinstancestate方法中保存数据,在oncreate或onrestoreinstancestate方法中恢复数据。

activity的内存泄漏问题

activity的内存泄漏是一个重要的问题。常见的导致内存泄漏的原因有静态变量持有activity引用、非静态内部类持有activity引用等。例如,在一个app中,如果有一个静态的handler对象,它会持有activity的引用,当activity销毁时,由于handler可能还在处理消息,就会导致activity无法被回收,从而造成内存泄漏。解决方法是使用静态内部类,并使用弱引用持有activity。

相关资讯

联系我们

电话:028-67245228

手机:19150357110

邮箱:mwmatelook@gmail.com

在线咨询客服

以下为推荐内容

微信二维码