1.1生命周期
活动A 启动另一个活动B,回调如下所示:
Activity A 的onPause() Activity B 的onCreate() onStart() onResume() Activity A 的onStop();如果B 是透明主题或DialogActivity,则不会回调A 的onStop。
使用onSaveInstanceState() 保存简单且轻量级的UI 状态
Lateinit var textView: TextView
var gameState: 字符串=null?
覆盖fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
gameState=SavedInstanceState?getString(GAME_STATE_KEY)
setContentView(R.layout.activity_main)
textView=findViewById(R.id.text_view)
}
覆盖fun onRestoreInstanceState(savedInstanceState: Bundle?) {
textView.text=SavedInstanceState?getString(TEXT_VIEW_KEY)
}
覆盖fun onSaveInstanceState(outState: bundle?) {
outState?run {
putString(GAME_STATE_KEY, 游戏状态)
putString(TEXT_VIEW_KEY, textView.text.toString())
}
super.onSaveInstanceState(outState)
}
1.2如何保存Activity的状态?
一般来说,调用onPause() 和onStop() 方法后,Activity 实例仍然存在于内存中,并且当Activity 返回前台时,该Activity 的所有信息和状态数据都不会消失。
但是,如果系统内存不足,则在调用onPause() 和onStop() 方法后,该Activity 可能会被系统丢弃。此时,内存中还没有该Activity的实例对象。如果此活动稍后返回前台,则之前所做的任何更改都将丢失。为了避免这种情况,请重写onSaveIntanceState() 方法。 onSaveInatanceState() 方法接受Bundle 类型的参数,并允许开发人员将状态数据保存到此Bundle 对象中。使用onSaveInstanceState() 方法时,在onPause() 或onStop() 方法之前调用。
1.3如何保存 Activity 的状态?
活动状态通常由系统自动保存。仅当您需要存储额外数据时才需要此功能。
一般来说,调用onPause() 和onStop() 方法后,Activity 实例仍然存在于内存中,当Activity 返回前台时,该Activity 的所有信息和状态数据都保留下来,并且您的所有更改都将被保留。
但是,如果您的系统内存不足,则在调用onPause() 和onStop() 方法后,您的Activity 可能会被系统销毁。此时内存中还没有Activity实例对象。如果该活动稍后返回前台,所做的更改将丢失。为了避免这种情况发生,您可以重写onSaveInstanceState() 方法。 onSaveInstanceState()方法接受一个Bundle类型的参数,因此开发者可以将状态数据保存到这个Bundle对象中,这样即使Activity被系统销毁,用户也可以恢复它并调用onCreate()方法,即上面的。将执行捆绑包。该对象作为实际参数传递给onCreate() 方法,开发人员可以从Bundle 对象中检索保存的数据,并使用这些数据将Activity 恢复到被销毁之前的状态。
例如,如果用户通过按BACK 键结束某个Activity,那么用户显然想要关闭该Activity,但不一定会调用onSaveInstanceState() 方法,因为某些场景不需要保存状态数据。请注意。目前没有必要这样做。必须保存数据以供下次恢复。也就是说,如果调用了onSaveInstanceState()方法,则会在执行之前进行调用。 onPause() 或onStop() 方法。
@覆盖
protected void onSaveInstanceState(bundle outState) {
//TODO 自动生成的方法存根super.onSaveInstanceState(outState);
}
1.4 在两个Activity 之间移动时应该执行哪个方法?
1.5 横竖屏切换时的Activity生命周期
1.6 如何将Activity 设置为窗口样式
1.7 如何终止一个活动? 如何安全地终止一个调用了多个活动的应用程序?
1.8 Android 中的上下文、活动和应用程序之间有什么区别?
……
所有面试题分析内容免费分享。如果您的朋友想要完整版,请点击【点击】免费获取。
2.服务
2.1Service是否在main thread中执行, service里面是否能执行耗时的操作?
默认情况下,当没有指示服务正在运行的进程时,服务和活动在当前应用程序所在进程的主线程(UI 主线程)上运行。
服务无法执行耗时的操作(网络请求、数据库副本、大文件)。
在特殊情况下,您可以在清单文件中配置服务运行的进程,使其可以在单独的进程中运行。
服务
android:name=\”com.baidu.location.f\”
android:enabled=“真”
android:进程=“:远程”
2.2Activity怎么和Service绑定,怎么在Activity中启动自己对应的Service?
活动通过bindService(Intent Service、ServiceConnection conn、int flags)绑定到Service。如果绑定成功,Service会以回调的形式将代理对象传递给conn,以获取Service提供的服务代理对象。
可以使用startService 和BindingService 方法在Activity 上启动服务。一般来说,如果你想获取一个Service的服务对象,比如音乐播放器、第三方支付等,你应该使用bindingService()方法。如果您只想启动后台任务,可以使用startService() 方法。
2.3说说Activity、Intent、Service是什么关系
这些是Android开发中最常用的类。其中,Activity和Service是Android的四大主要组件之一。它们可以被视为兄弟姐妹,因为它们都是ContextWrapper 的子类,而ContextWrapper 是Context 类的子类。然而兄弟二人却各有绝活。活动负责显示和操作用户界面,服务负责处理后台任务。由于数据可以通过Intent 在Activity 和Service 之间传递,因此Intent 可以被视为通信信使。
2.4 服务和活动是否在同一个线程中?
2.5 如何启动服务,有什么区别,如何停止服务?
2.6 什么是IntentService?有什么好处?
2.7 请描述服务生命周期
2.8 服务启动流程
……
所有面试题分析内容免费分享。需要完整版的朋友请【点击】免费获取。
3. 列表视图
3.1ListView如何提高其效率?
如果ConvertView 为空,请使用setTag() 方法将每个View 绑定到将包含控件的ViewHolder 对象。如果ConvertView不为空,且要复用创建的View,则使用getTag()方法获取绑定的ViewHolder对象。这样就避免了findViewById逐层查询控件,快速找到控件。
复用ConvertView,使用历史视图,效率提升200%
自定义静态类ViewHolder,减少findViewById的数量。效率提高50%
异步加载数据,以页为单位加载数据。
使用WeakRefrence引用ImageView对象。
3.2ListView如何实现分页加载
为ListView设置滚动监听:setOnScrollListener(new OnScrollListener{….})
侦听器有两种方法:一种用于更改滚动状态(onScrollStateChanged),另一种在listView 滚动时调用(onScroll)。
改变滚动状态有以下三种方式:
手指按下并移动状态: SCROLL_STATE_TOUCH_SCROLL: //触摸并滑动
惯性滚动(滑行(flgin)状态): SCROLL_STATE_FLING: //滑行
安静状态: SCROLL_STATE_IDLE: //安静
处理各种情况。
批量加载数据,仅考虑静态条件。这意味着如果最后一个可见条目是数据适配器(集合)中的最后一个条目,则此时可以加载更多数据。每次加载时都会计算滚动次数,如果滚动次数大于或等于总数,则可以通知用户没有更多数据了。
3.3ListView可以显示多种类型的条目吗
当然这是可能的。 ListView中显示的每一项都是通过baseAdapter的getView(int Position, View ConvertView, ViewGroupparent)来显示的。理论上,每个项目都可以是不同类型的视图。
例如,如果您从服务器获取id=1 的项目,则如果id=1 则加载类型1 条目,如果id=2 则加载类型2 条目。通用布局经常出现在信息客户端中。
此外,适配器还提供了两个方法:getViewTypeCount()和getItemViewType(intposition)。 getView 方法允许您为不同的视图类型加载不同的布局文件。
3.4 更改ListView数据集后如何更新ListView
3.5 如何将ListView放置在指定位置
3.6 如何在ScrollView中嵌入ListView
3.7 如何优化ListView中的图片
3.8 ListView中出现图像错位问题怎么办?
……
4.片段
什么是片段?
片段生命周期
如何使用片段
比较片段生命周期和活动
什么是片段后栈?
重复片段问题
……
5.优化安卓性能
如何对Android应用程序进行性能分析
什么情况下会发生内存泄漏?
如何避免OOM异常
Android 中如何捕获未捕获的异常
什么是ANR?如何避免和解决ANR?
……
最后
多年来,编辑了解到,大多数入门级和中级Android工程师想要提高自己,往往必须自己探索和成长,这是不系统的、短暂的,我了解到这并没有帮助。
因此,我们收集整理了《2024年Android移动开发全套学习资料》册。最初的目的也很简单。换句话说,我们想帮助那些想学习、提高自己,但不知道从哪里开始的朋友。
由于文件较多,这里仅展示部分目录截图。这套完整的内容包括对领先制造商的采访、学习笔记、源代码讲义、实践项目、概述路线、电子书和教学视频。它将继续更新。
一个人可以走得快,但一群人可以走得更远。无论是IT行业的资深人士还是对IT行业感兴趣的新人。
欢迎任何人加入我们的圈子(技术交流、学习资源、职场投诉、大公司内部推荐、面试指导),让我们一起学习、成长!
如果您需要此信息,请从第 栏中获取。
[正在传输外部链接图像.(img-YDZ0L4EN-1719160918719)]
[正在传输外部链接图像.(img-mqtKx76Z-1719160918719)]
[外部链接图像正在传输.(img-QfRfQck7-1719160918720)]
[外部链接图像正在传输.(img-AfXaH3Uf-1719160918721)]
由于文件较多,这里仅展示部分目录截图。这套完整的内容包括对领先制造商的采访、学习笔记、源代码讲义、实践项目、概述路线、电子书和教学视频。它将继续更新。
一个人可以走得快,但一群人可以走得更远。无论是IT行业的资深人士还是对IT行业感兴趣的新人。
欢迎任何人加入我们的圈子(技术交流、学习资源、职场投诉、大公司内部推荐、面试指导),让我们一起学习、成长!
如果您需要此信息,请从第 栏中获取。
以上#9419页面最新最前线互联网安卓面试题分析合集相关内容来源网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91862.html