Android面试题自答(一)

本文深入探讨了Android中Activity的生命周期,从创建到销毁的各个关键方法,以及如何在不同Activity之间传递数据,提供了完整的流程指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.什么是Activity?

Activity负责连接用户与View,为安卓用户呈现UI界面,是与用户进行交互的组件,在MVC结构中属于C结构。

2.请描述一下Activity生命周期

方法

描述

可被杀死

下一个

onCreate()

在activity第一次被创建的时候调用。这里是你做所有初始化设置的地方──创建视图、设置布局、绑定数据至列表等。如果曾经有状态记录(参阅后述Saving Activity State。),则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数。 

总继之以onStart()。

onStart()

    

onRestart()

在activity停止后onStop(),在再次启动之前被调用。 

总继之以onStart()。

onStart()

onStart()

当activity正要变得为用户所见时被调用。 

当activity转向前台时继以onResume(),在activity变为隐藏时继以onStop()。

onResume() 
or
onStop()

    

onResume()

在activity开始与用户进行交互之前被调用。此时activity位于堆栈顶部,并接受用户输入。 

继之以onPause()。

onPause()

onPause()

当系统将要启动另一个activity时调用。此方法主要用来将未保存的变化进行持久化,停止类似动画这样耗费CPU的动作等。这一切动作应该在短时间内完成,因为下一个activity必须等到此方法返回后才会继续。 

当activity重新回到前台是继以onResume()。当activity变为用户不可见时继以onStop()。

onResume() 
or
onStop()

onStop()

当activity不再为用户可见时调用此方法。这可能发生在它被销毁或者另一个activity(可能是现存的或者是新的)回到运行状态并覆盖了它。 

如果activity再次回到前台跟用户交互则继以onRestart(),如果关闭activity则继以onDestroy()。

onRestart() 
or
onDestroy()

onDestroy()

在activity销毁前调用。这是activity接收的最后一个调用。这可能发生在activity结束(调用了它的 finish() 方法)或者因为系统需要空间所以临时的销毁了此acitivity的实例时。你可以用isFinishing() 方法来区分这两种情况。

nothing


 正常启动与关闭:oncreate->onstart->onresume->onpause->onstop->onDestroy()


 A开启后开启B  :oncreate(A)->onstart(A)->onresume(A)->onpauese(A)->oncreate(B)->onstart(B)->onresume(B)
->onsaveInstanceState(A)->onstop(A)->

 3.两个Activity之间跳转时必然会执行的是哪几个方法。

startActivity(Intent intent) ;

startActivityForResult (Intent intent, int requestCode) ;

onActivityResult (int requestCode, int resultCode, Intent data);

setResult(int resultCode)

 4.横竖屏切换时候Activity的生命周期。

onpause()->onsaveInstanceState()->onstop()->ondestroy()->oncreate()->onstart->onresume()

5.如何将一个Activity设置成窗口的样式

打开AndroidManifest.xml,往activity里添加主题android:theme="@android:style/Theme.Dialog"

附:

android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式
android:theme="@android:style/Theme.NoTitleBar" : 不显示应用程序标题栏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不显示应用程序标题栏,并全屏
android:theme="Theme.Light ": 背景为白色
android:theme="Theme.Light.NoTitleBar" : 白色背景并无标题栏
android:theme="Theme.Light.NoTitleBar.Fullscreen" : 白色背景,无标题栏,全屏
android:theme="Theme.Black" : 背景黑色
android:theme="Theme.Black.NoTitleBar" : 黑色背景并无标题栏
android:theme="Theme.Black.NoTitleBar.Fullscreen" : 黑色背景,无标题栏,全屏
android:theme="Theme.Wallpaper" : 用系统桌面为应用程序背景
android:theme="Theme.Wallpaper.NoTitleBar" : 用系统桌面为应用程序背景,且无标题栏
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" : 用系统桌面为应用程序背景,无标题栏,全屏
android:theme="Theme.Translucent : 透明背景
android:theme="Theme.Translucent.NoTitleBar" : 透明背景并无标题
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" : 透明背景并无标题,全屏
android:theme="Theme.Panel ": 面板风格显示
android:theme="Theme.Light.Panel" : 平板风格显示
 6.你后台的Activity被系统 回收怎么办?

  在onSaveInstanceState()中进行数据保存,再次创建时调用oncreate会附带一个bundle,利用bundle可以进行数据还原

 7.如何退出Activity?如何安全退出已调用多个Activity的Application? 

  单一的Activity:直接调用finish(),system.exit(),killProcess()

  多个的Activity:

1、抛异常强制退出: 
该方法通过抛异常,使程序Force Close。 
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。 

2、记录打开的Activity: 
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。 

3、发送特定广播: 
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。 

4、递归退出 
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。 

  8.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

同6

 9.两个Activity之间怎么传递数据?

通过Intent,可以传递各种类型的数据,包括对象

或者使用SharedPreferences 实现数据共享

 10.怎么让在启动一个Activity是就启动一个service?

首先定义好一个service,然后在activity的onCreate里面进行bindservice或者startService。 


  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值