安卓Android面试题android基础Android

面试 | Android四大组件 更新篇

2017-03-04  本文已影响604人  乆丩乣
1、画出Activity的生命周期图
忘记是从哪篇文章里扒的图了
2、介绍下不同场景下Activity生命周期的变化过程
3、当Activity A启动Activity B 时,生命周期执行过程?

A.onPause() -->
B.onCreate() ,onStart(), onResume() -->
A.onStop() 如果B 是个透明的,或者 是对话框的样式, 就不会调用 A.onStop()

4、Activity跳转前要向SQLite里保存数据,应该在Activity中的哪个生命周期方法中执行?
5、内存不足时系统会杀掉后台的Activity,若需要进行一些临时状态的保存,在哪个方法进行?怎么恢复数据?
6、onSaveInstanceState()被执行的场景有哪些:

系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,因此系统都会调用onSaveInstanceState(),让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则

7、Activity被回收数据保存和恢复代码
public class AllAppActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //判断是否有以前的保存状态信息
        if(savedInstanceState!=null){ 
            savedInstanceState.get("key");
        }
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        //可能被回收内存前保存状态和信息,
        Bundle data = new Bundle();
        data.putString("key", "value");
        outState.putAll(data);
        super.onSaveInstanceState(outState);
    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        //判断是否有以前的保存状态信息
        if(savedInstanceState!=null){ 
            savedInstanceState.get("key");
        }
        super.onRestoreInstanceState(savedInstanceState);
    }
}
8、如果Activity A的启动模式是SingleTask,跳转到Activity B 且返回值传给A ,要怎么处理?

🔹Activity A使用了SingleTask模式在执行界面跳转的时候,多次启动此Activity都不会被重新创建,所以可能不会接收到传过来的Bundle里面的值,这样就导致传统的方法是接受不到返回值的。
🔹singleTask模式下,系统会回调onNewIntent()方法,在这个方法中可以调用 setIntent(intent); 这样就可以拿到Activity B跳到Activity A使用的Intent,从而拿到返回数据

8.1、你知道onNewIntent吗?

如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于onPause、onStop 状态的话,其他应用再发送Intent的话,执行顺序为: onNewIntent,onRestart,onStart,onResume。

9、Activity的启动模式?
10、如何给Activity指定启动模式?

<activity
android:name="com.ryg.chapter_1.SecondActivity"
android:configChanges="screenLayout"
android:label="@string/app_name"
android:launchMode="standard"
android:taskAffinity="com.ryg.task1" />
```

Intent intent = new Intent();
intent.setClass(A_Activity.this,B_Activity.class);
intent.addFlags(Intenet.FLAGS_ACTIVITY_NEW_TASK);
startIntent(intent);
11、 横竖屏切换时候activity的生命周期?
12、如何将一个 Activity 设置成窗口的样式?

只需要给我们的 Activity 配置如下属性即可android:theme="@android:style/Theme.Dialog"

14、如何获取当前屏幕Activity的对象?

使用ActivityLifecycleCallbacks

15、如何判断一个Activity是否在运行?
if (activity == null || activity.isDestroyed() || activity.isFinishing()) {
    YES
}
16、同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?

可以放在不同的Task中。需要为不同的activity设置不同的affinity属性,启动activity的Intent需要包含FLAG_ACTIVITY_NEW_TASK标记。

17、Activity中 this、getApplicationContext和getActivity的区别
18、Application(或者Service)和Activity都可以调用Context的startActivity方法,那么在这两个地方调用startActivity有区别吗?

在Application(或者Service)需要给Intent设置Intent.FLAG_ACTIVITY_NEW_TASK才能正常启动Activity

19、Activity之间的数据传递有哪些方式?
20、Fragment 的好处:
21、Fragment 在你们项目中的使用

Fragment 是 android3.0 以后引入的的概念,做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个 activity 里面,现在可以用多 Fragment 来代替,只有在需要的时候才加载Fragment,提高性能。

22、Fragment 跟 Activity 之间是如何传值的
23、Intent的原理,作用,可以传递哪些类型的参数?
24、service和Thread区别?
25、Service的启动方式及其区别?

Service有俩中启动方式,分别是startService和bindService。

26、Activity 怎么和 Service 绑定,怎么在 Activity 中启动自 己对应的 Service?
27、Service中可以弹Toast吗?
28、如何保证Service在后台不被kill
29、进程的优先级
30、IntentService与Service的区别?
31、Service是否正在运行
    private boolean isServiceRunning() {
        ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        {
            if ("com.example.demo.BindService".equals(service.service.getClassName())) {
                return true;
            }
        }
        return false;
    }
32、Android Service与Activity之间的通信方式?
33、广播概述
34、Android引入广播机制的用意?
35、为什么要用 ContentProvider?它和 sql 的实现上有什么差别?
36、ContentProvider的URI的配置?

清单文件之指定URI或者代码里面指定URI,contentProvider通过URI访问数据

37、如何通过一套标准及统一的接口获取其他应用程序暴露的数据?

Android提供了ContentResolver,外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据。

38、contentprovider怎么实现数据共享?

一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全暴露出去,而且Content providers是以类似数据库中表的方式将数据暴露。Content providers存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。要想使应用程序的数据公开化,可通过2种方法:创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限。

39、Android如何访问自定义ContentProvider

第一:得到ContentResolver类对象:ContentResolver cr = getContentResolver();
第二:定义要查询的字段String数组。
第三:使用cr.query();返回一个Cursor对象。
第四:使用while循环得到Cursor里面的内容

40、Android中Activity, Intent, Content Provider, Service各有什么区别。
41、Android数据存储方式?

传送门·更多Android面试问题

上一篇下一篇

猜你喜欢

热点阅读