当你看到这篇文章时,如果还没有看过我之前发布的2016网易秋招,技术岗内推电面内容最新出炉以及2016阿里秋招提前批技术岗电面内容最新出炉,可以先去了解一下大致内容。由于很多的题目,在之前的文章中已经有所涉及,所以我这里只对还没有讲过并且稍有难度的内容进行梳理,如果你对其他题目的答案有需求,可以移步到本头条号的其它文章。
1. onSaveInstanceState (Bundle outState)的注意事项
1.1 该方法何时被调用?
答:当Activity很可能会被系统销毁,但用户实际上并没有明确销毁该Activity的意向时,onSaveInstanceState( )方法会被调用。这些情况包括:Activity跳转;旋转屏幕;按下HOME键并去运行其它的程序;关闭屏幕。
1.2 是否需要在该方法中手动保存UI组件的状态?
答:Android中的每个View都默认实现了onSaveInstanceState()方法也就是说他们的状态会自动存储并在需要时自动恢复。但是这只有在你为这个View提供了唯一的ID之后才起作用,如果没有提供ID,将不会存储它的状态。
1.3 可否在该方法中更新数据库?
答:不可以。因为该方法的执行具有不确定性,如果在此处进行数据更新操作,很可能因为该方法未被执行而丢失数据。
1.4 该方法的执行时间点?
答:确定发生在onStop()方法之前,但与onPause()方法的前后关系不确定
2.onRestoreInstance(Bundle outState)的注意事项
2.1 该方法何时被调用?
答:当用户在离开某个Activity后,又回到该Activity并且该Activity在用户离开后已经被系统销毁了,此时onRestoreInstance()方法会被调用。
2.2 该方法与onSaveInstanceState方法是否总是成对出现的?
答:不一定。
2.3 数据还原的工作是否只能在该方法中实现?
答:一般情况下我们都可以在onRestoreInstanceState()方法中做数据还原工作。但我们也可以在onCreate()方法中做数据还原的工作,因为onRestoreInstanceState()中的Bundle对象会传递到onCreate()方法中。
2.4 该方法的执行时间点?
答:发生在onStart()方法后。
3.AsyncTask的注意事项
3.1 AysncTask的核心方法中,哪些在线程池执行,哪些在主线程执行?
答:doInBackground方法在线程池执行;onPreExecute,onProgressUpdated和onPostExecute方法在主线程中执行。
3.2 AysncTask是串行还是并行执行的?
答:在2.3之后的版本,可以支持串行和并行,当想要串行执行时,直接执行execute()方法,如果需要并行执行,则要执行executeOnExecutor()方法。
3.3 AsyncTask是如何与主线程通信的?
AsyncTask中包含了一个静态的InternalHandler,它肩负着将执行环境从子线程切换到主线程的任务,这就意味着这个handler对象必须在主线程中创建,即要求我们必须在主线程中创建AsyncTask。
3.4 AsyncTask中实际上有两个线程池,其中线程池SerialExecutor用于任务排队,线程池Thread_Pool_Executor用于执行任务。