字节跳动Andorid-25k+的面试题

3 可视生命周期 onResume() —-> onPause()之间进行切换 onCreate() —> onStart() —> onResume() 现在有一个activity没有完全覆盖 onPause() 如果上面的activity关闭 onResume()

3.横竖屏切换时候activity的生命周期?

这个生命周期跟清单文件里的配置有关系 1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期 默认首先销毁当前activity,然后重新加载

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

游戏开发中, 屏幕的朝向都是写死的.

4.如何将一个activity设置成窗口的样式?

可以自定义一个activity的样式,详细见手机卫士的程序详细信息 android:theme=”@style/FloatActivity” E:\day9\mobilesafe\res\values\style

5.activity启动模式?

Activity启动模式任务堆栈 Activity中的任务是与用户交互的一组Activity的集合,Activity会被按打开顺序安排在一个堆栈里。 任务栈:并不是Activity是Activity的引用(内存地址) standard 标准模式 每次激活Activity时都会创建Activity,并放入任务栈中 默认模式 singleTop 独享堆栈顶端 如果在任务的栈顶正好存在该Activity的实例,就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例) 浏览器的书签 singleTask 独享任务堆栈 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中 浏览器的主页 singleInstance单例 在一个新栈中创建该Activity实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity的实例存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中 通话界面 Singletop:如果重复使用上一次的Activity,就重用。 singleTask:如果使用已经实例化Activity,就重用,并且删除重用Activity前面的Activity,重用的Activity置顶任务栈。 singleInstance:在一个新栈中创建该Activity实例,并让多个应用共享该栈中的该Activity实例。(调用Activity和重用Activity不在一个栈中) singleTop 、singleTask 、singleInstance 优化性能、重用Activity。 6.后台activity被系统回收了怎么办?如果后台activity由于某种原因被系统回收了,如何保存之前状态? 除了在栈顶的activity,其他的activity都有可能在内存不足的时候被系统回收,一个activity越处于栈底,被回收的可能性越大.

protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong(“id”, 1234567890);
}
public void onCreate(Bundle savedInstanceState) {
//判断savedInstanceState是不是空.
//如果不为空就取出来
super.onCreate(savedInstanceState);
}

7.如何退出activity,如何安全退出已调用多个activity的application?

退出activity 直接调用 finish () 方法 . //用户点击back键 就是退出一个activity 退出activity 会执行 onDestroy()方法 . 1、抛异常强制退出: 该方法通过抛异常,使程序Force Close。 验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。

//安全结束进程 android.os.Process.killProcess(android.os.Process.myPid());

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

List lists ; 在application 全集的环境里面
lists = new ArrayList();

lists.add(activity);

for(Activity activity: lists) { activity.finish(); }

3、发送特定广播: 在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。 //给某个activity 注册接受接受广播的意图
registerReceiver(receiver, filter)

//如果过接受到的是 关闭activity的广播 就调用finish()方法 把当前的activity finish()掉

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

上面是网上的一些做法.

其实 可以通过 intent的flag 来实现… intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)激活一个新的activity,然后在新的activity的oncreate方法里面 finish掉. 8.两activity之间怎么传递数据? 基本数据类型可以通过. Intent 传递数据 在A activity中

Intent intent = new Intent();
intent.putExtra(name, value)
Bundle bundle = new Bundle();
bundle.putBoolean(key,value);
intent.putExtras(bundle);
extras.putDouble(key, value)
// 通过intent putExtra 方法 基本数据类型 都传递
Intent i = getIntent();
i.getExtras();
intent.getStringExtra(“key”,“value”);
intent.getBooleanExtra(“key”,“value”)
Bundle bundle = new Bundle();
bumdle.putShort(key, value);
intent.putExtras(bumdle);
intent.putExtras(bundle)


Application 全局里面存放 对象 ,自己去实现自己的application的这个类,

基础系统的application , 每个activity都可以取到

让对象实现 implements Serializable 接口把对象存放到文件上. 让类实现Serializable 接口,然后可以通过ObjectOutputStream //对象输出流

File file = new File(“c:\1.obj”);
FileOutputStream fos = new FileOutputStream(file);

最后

这里我希望可以帮助到大家提升进阶。

内容包含:Android学习PDF+架构视频+面试文档+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。

喜欢本文的话,不妨给我点个小赞、评论区留言或者转发支持一下呗~

img
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值