ANDROID(一)

Activity

1.什么是Activity? 请描述一下生命周期

Activity:

一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上

一个程序一般由多个Activity组成,各activities之间关系很松散,它们之间没有直接的关联。必须有一个activity被指定为Main activity,它是程序启动时首先显示的界面。每个activity都可以随意启动其它的activity。每当一个activity被启动,则前一个activity就被停止。一个程序中的所有启动的activity都被放在一个栈中,所以被停止的activity并没有销毁,而在存于棧中。新启动的activity先被存放于栈中,然后获得输入焦点。在当前活动的activity上点返回键,它被从棧中取出,然后销毁,然后上一个activity被恢复。当一个activity因为新的activity启动而被停止时,它会收到状态变化的通知,这样的变化有多个,每个都会引起系统调用一个相应的回调方法以通知activity,这些回调方法被统称为“生命周期回调方法”。这些回调方法分别在Activity被创建、停止、恢复、销毁时被调用。

生命周期:

在 android 中,Activity 拥有四种基本状态:

  1. Active/Runing一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
  2. Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
  3. Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped状态。
  4. Killed Activity 被系统杀死回收或者没有被启动时处于 Killed状态。

当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。下图说明了 Activity 在不同状态间转换的时机和条件:

图 1. Activity 的状态转换

  1. protected void onStart()该方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用。
  2. protected void onResume()在 Activity 从 Pause 状态转换到 Active 状态时被调用。
  3. protected void onResume()在 Activity 从 Active 状态转换到 Pause 状态时被调用。
  4. protected void onStop()在 Activity 从 Active 状态转换到 Stop 状态时被调用。一般我们在这里保存 Activity 的状态信息。
  5. protected void onDestroy()在 Active 被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作。
图 3. 这些方法的调用时机

共有七个周期函数: 
void onCreate(Bundle savedInstanceState) 
void onStart() 
void onRestart() 
void onResume() 
void onPause() 
void onStop() 
void onDestroy()

在Activity显示的过程中会依次调用OnCreate、onStart和OnResume,在Activity销毁的过程中,会依次调用onPause、onStop和onDestroy.在执行onStop过程中Activity重新获得了焦点,系统会调用

onRestart方法,之后调用onStart和onResume方法

1.完整生命周期:     即一个activity从出现到消失,对应的周期方法是从onCreate到onDestroy 
2.可见生命周期:     从onStart()到onStop()方法,在这个周期中,用户可以看见Activity,但不一定能够与之交互,这两个方法可以随着状态的变化被执行多次。 
3.前景生命周期:      从onResume()到onPause()方法,在这个周期中,Activity处在其它Activity之前,即在Activity栈的最顶端,负责与用户进行交互,伴随着状态的变化,这两个方法可以被执行多次

2.Activity调用的几种方法

显示启动Activity

  显示启动activity

  Intent intent = new Intent(this,MyActivity.class);

  startActivity(intent);

  启动一个activity并获取结果

  startActivityForResult();

  (回来时调用onActivityResult())

隐式启动Activity

  指定Activity Action:

  例如,你想让用户发送一个电子邮件,你可以创建以下的Intent:

  Intent intent = new Intent(Intent.ACTION_SEND);

  intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);

  startActivity(intent);

关闭Activity

     Activity可以内部调用finish()方法关闭它自己,也可以调用finishActivity()方法关闭其它的activity、

3.在Activity之间如何传递数据

四种方法:

Intent对象

  例如:Intent intent = new Intent(this,MyActivity.class);

     intent.putExtra("intent_int",300);

     startActivity(intent);

  获取:

     int demo = getIntent().getExtras().getInt("intent_int");

静态变量

  将类的成员定义成public static

剪切板

  不过只能传文本数据以及Intent对象支持的数据

全局对象

  可以为应用程序定义一个全局变量,继承application

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

onCreate():在activity生命周期开始时调用

onRestoreInstanceState():用来恢复UI状态

onRestart():当activity重新启动时调用

onStart():当activity对用户即将可见时调用

onResume():当activity与用户交互时,绘制界面

onSaveInstanceState():当activity即将移除栈顶保留UI状态时被调用

onPause():暂停当前活动的activity,提交持久数据的改变,停止动画和其他占用CPu资源的东西,由于下一个activity在这个方法返回之前不会resume,所以这个方法的代码执行要快

onStop():activity不再可见时调用

onDestroy():在activity销毁栈时被调用的最后一个方法

5.横竖屏幕切换时候activity的生命周期

①不设置activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,且竖屏时会执行两次

②设置activity的android:configChanges=”orientation"时,切屏还是会调用各个生命周期,切横屏,竖屏时只会执行一次

③设置activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

6.你后台的Activity被系统回收怎么办?

系统会帮我们记录下回收之前Activity的状态,再次调用被回收的Activity就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里面带上参数savedInstanceState,savedInstanceState是一个Bundle对象,基本上可以把它理解为系统帮你维护的一个map对象,使用它可以恢复到回收前的状态

7.如何将一个activity设置为窗口的样式

①在你的style.xml文件中可以新建一如下的类似Dialog的style:

<style name="Theme.FloatActivity" parent="android:style/Theme.Dialog></style>

②在AndroidManifest.xml中在你需要显示为窗口的activity中添加如下属性:

android:theme="@style/Theme.FloatActivity"即可

也可以直接添加对应需要展示为Dialog style的activity的android:theme属性值为:android:theme="@android:style/Theme.Dialog"

转载于:https://www.cnblogs.com/daimingming/p/3352425.html

Android常见面试题(一)相关推荐

  1. 网易资深安卓架构师:2021年Android常见面试题,面试必问

    开头 让我们一起来看看,字节跳动的第三面,面试官都问了什么?(第一二面的题目及答案已整理,需要的可以在文末领取) 从七月中旬开始,我前前后后差不多一共投递了八十份简历,到目前为止,我参加面试的面试有十 ...

  2. 2021年Android常见面试题,含爱奇艺,小米,腾讯,阿里

    其实如果你技术深度足够,大必不用为就业而忧愁.每个行业何尝不是这样,最开始的风口,到慢慢的成熟.Android初级在2020年的日子里风光不再, 靠会四大组件就能够获取到满意薪资的时代一去不复返.** ...

  3. Android常见面试题

    TCP的三次握手/四次挥手 Android虚拟机和java虚拟机的原理和区别 1.虚拟机简述 虚拟机即虚构模拟出来的计算机,它是通过软件模拟仿真的方式来实现各种实际计算机上的功能,它具有完善的架构,如 ...

  4. android常见面试题与我自己的回答 (二)

    1,android:process 解决访问SharedPreferences,不在同一进程 private SharedPreferencesDB(Context cxt) {this.contex ...

  5. android 常见面试题(三)

    1)请介绍下Android中常用的五种布局. 常用五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),Relat ...

  6. Android知识点汇总以及常见面试题

    Android知识点汇总以及常见面试题 1. 链表和数组的区别 2. List Hash 数组的区别 3. 用过哪些三方SDK 4. Android四大组件 5. 堆和栈的区别 6. Activity ...

  7. android半透明闪退,移动端常见面试题一:移动端兼容解决方案

    原标题:移动端常见面试题一:移动端兼容解决方案 移动端 经常出现的兼容问题 1.安卓浏览器看背景图片,有些设备会模糊 因为手机分辨率太小,如果按照分辨率来显示网页,字会非常小,安卓手机devicePi ...

  8. for vue 一行2列_vue常见面试题汇总

    点击"卓跃教育",选择"星标?" 在看|星标|留言,  真爱 今天跟大家分享下Vue常见面试题的知识. 1.vue优点? 答:轻量级框架:只关注视图层,是一个构 ...

  9. vue 离开页面事件_【必看】58 道 Vue 常见面试题集锦,涵盖入门到精通,自测 Vue 掌握程度...

    △ 是新朋友吗?记得先点web前端学习圈关注我哦- 1.vue优点? 答: 轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十 kb : 简单易学:国人开发,中文文档,不存在语言障碍 , ...

最新文章

  1. 虚幻引擎的数学知识学习教程 Math for Unreal Engine (Early Preview)
  2. 卷进大厂系列之LeetCode刷题笔记:长度最小的子数组(中等)
  3. Python零碎知识(1):strip lstrip rstrip使用方法
  4. PHP面试题:PHP.ini路径?
  5. 某CTF比赛部分wp
  6. layui绑定json_JSON绑定:概述系列
  7. cron 每10分钟执行一次_早餐儿子最爱它,简单卷一卷,10分钟做一大盘,三天两头吃一次...
  8. PyTorch 1.0 中文文档:torch.nn.functional
  9. 鸿蒙一号指纹锁,【诉说实情】火车头战狼一号家用防盗门指纹锁怎么样?新手必看内情...
  10. 普通人赚大钱,做好这一点,才是真正的捷径
  11. python print 换行_和我一起学Python?第1讲——Print()函数
  12. 矩阵的秩与行列式的几何意义
  13. linux不允许将硬链接指向目录,为什么 UNIX/Linux 不允许目录硬链 【翻译】
  14. (转)DB2 db2diag.log 日志分析
  15. Java设计模式——策略模式
  16. Unity3d LED数码管单表控制/多表控制
  17. FFmpeg学习之QT音频播放
  18. scrapy创建爬虫项目
  19. linux 游戏手柄 驱动,forev手柄驱动
  20. 广告渠道投放效果评估分析

热门文章

  1. Hadoop之道--MapReduce之Hello World实例wordcount
  2. windows中用cmd命令生成任意大小文件
  3. MySQL第3天:MySQL的架构介绍之linux版安装
  4. springmvc十二:@PathVariable
  5. Redis分布式锁(Redlock官方文档的理解)
  6. ArcGIS Runtime for .Net Quartz开发探秘(三):承接来自GIS服务器的服务
  7. Java基础小常识-继承-(10)
  8. Ubuntu关闭ipv6
  9. AutoMySQLBackup 3.0 Bug:du: WARNING: use --si, not -H
  10. 汇编语言第二课作业2.1