史上最详细 最基础的 android 面试 知识点总结(一)

1. 什么是Activity ?

这样的问题 回答的时候 ,首先 Activity 是 四大组件之一,是一个view 对象的容器,可以用来展现一个界面,通过 setcontentView() ,//方法来 设置要显示的布局

activity 是 上下文对象 Context的子类 同时 实现了 window.callback 和 keyevent.callback 这两个接口, 所以 activity 可以响应 与处理 窗体与用户的交互事件,以及与键盘相关的事件。(Context 上下文对象, 其实就是一个变量 ,维护了android 应用 一些公共环境的引用,比如 通过 上下文 ,我们就可以拿到 资源管理的服务,系统的资产目录,或者通过getcachdir()获取当前应用运行所在的目录,一旦拿到了上下文,就相当于拿到了已知相关环境的引用)。拿到activity 就可以重写 onkeydown ontouchevent 去处理窗体事件。

2. 请描述下 activity 的生命周期?

生命周期,描述的是一个类,从创建(new 出来)到死亡(垃圾回收)过程中 执行的方法, 在这个过程中,对于不同的生命阶段会调用不同的方法。

activity 从创建打销毁有多种状态,从一种状态到另一种状态 会激发相应的方法。这些回调方法包括,oncreate ondestroy onstart onstop onresume onpause, 这些方法都是两两对应的 oncreate 创建 与 ondestroy 销毁。 onstart 可见 与 onstop 不可见 onresume可编辑(获取到焦点)与 onpause 失去焦点。 还有一种情况 当 activity 被 stop掉 ,但是没有被 destroy ,再次启动此 activity 时候就会调用 onrestart 方法(而不调用 oncreate)。如果被destroy 了 那么就会调用 oncreate。

结合项目讲 ,为了保证每次进入activity 看到的界面是最新的 我们就把这操作 写到onstart 方法里。或者检查网络(每次进入界面检查是否联网)。 视频播放 ,比如 看着视频,有电话打进来,那么我们就需要把视频播放器 暂停掉,这个操作放在onpause 或者onstop 方法里面 比较好,然后在onresume 里面 在恢复 播放。

常用的c 就是以上这些方法 还有一些方法可以了解下 当做扩展 比如 onpostresume  onpostcreate 这是系统自己调用的, 在执行 onresume oncreate 的时候会去执行。

3. activity 在跳转的时候会执行哪些方法。

一般 从A activity 跳转到 B activity 首先 A activity 会失去焦点(onpause) 变为不可见 (onstop)B activity 在 创建 (oncreate)可见(onstart) 获得焦点(onreusme),但是一些特殊情况,比如 把 B activity 背景设为透明,或者 是 dialog 样式,那么 A activity 在失去焦点后,还是可见的,所以不会执行 onstop 方法。

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

这个生命周期 跟清单文件 里面的配置有关。

1.不设置Activity的 android: configchanges 时 ,切换屏幕会重新调用 个生命周期方法 首先onpause onstop ondestroy 然后 oncreate onstart onresume .

如果我们 设置 configChanges 设置为 android:configChanges="orientation|keyboardHidden"时,默认 就不会销毁 在创建,但是 我发现 在我的手机上,打开 自动旋转屏,一样还是会销毁在创建, 关闭旋转屏 就没问题。 一般开发中我们都会把 activity 设置成 orentation的。

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

退出 activity 直接调用finish 方法(比如用户点击back键 就是退出一个activity ),退出activity 会执行 ondestroy 方法。

1,异常 退出, 要退出的时候抛出一个异常 比如空指针 使程序 force close ,比如

import java.lang.Thread.UncaughtExceptionHandler;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity implements OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Thread.setDefaultUncaughtExceptionHandler(new ExtAppExceptionHandler());//Sets the default uncaught exception handler. This handler is invoked in case any Thread dies due to an unhandled exceptionfindViewById(R.id.btn).setOnClickListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}String s;public void extApp(){//try {s.equals("aaa");// 这里 s 未进行初始化,肯定会抛出异常, 如果我们要退出 程序 就要拦截掉弹出的 crash 窗口(注意不要自己捕获,否则就会拦截掉)//} catch (Exception e) {//// TODO Auto-generated catch block//e.printStackTrace();//}}class ExtAppExceptionHandler implements UncaughtExceptionHandler{@Overridepublic void uncaughtException(Thread thread, Throwable ex) {android.os.Process.killProcess(android.os.Process.myPid());// 这里杀死当前进程。退出app}}@Overridepublic void onClick(View v) {extApp();}}

2, 可以定义一个集合,每次进入activity的时候 将当前activity 加入到 集合中, 在每个activity 的ondestroy 方法中 remove掉 添加进的当前activity。(以上 可在baseactivity 中), 然后在我们退出app的时候 便利 这个集合,把每一个都finish()。

3. 我们也可以通过广播的方式, 在 每个activity 中注册一个广播, 当我们 退出 的时候 发送一个广播 然后finish 掉 每个activity。

以上三种是比较常用的关闭app的操作。

当问到对于 activity的理解 问题 可以回答以上几点。

6. service 是否在main thread 中, service 中能否进行耗时操作。

默认 情况,没有显示的指定 service 所在的线程,那么service 和 activity 是运行在当前app 所在进程的 main thread(ui 线程)中的,所以 不可以做耗时操作。

答:他是憋死的,因为沙漠里没有电线杆撒尿。问:

史上最详细 最基础的 android 面试 知识点总结(一)

相关文章:

你感兴趣的文章:

标签云: