美文网首页Android开发经验谈
字节跳动Andorid-25k+的面试题

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

作者: 进阶程序员007 | 来源:发表于2020-09-04 14:41 被阅读0次

前言

andorid开发也做了5年有余了,也面试很多加企业,借此机会分享一下,我们中遇到过的问题以及解决方案吧,希望能够对正在找工作的andoird程序员有一定的帮助。特别献上整理过的50道面试题目

activity

1.什么是activity?

四大组件之一,一般的,一个用户交互界面对应一个activity setContentView() ,// 要显示的布局 button.setOnclickLinstener{ } , activity 是Context的子类,同时实现了window.callback和keyevent.callback, 可以处理与窗体用户交互的事件.

里面不能进行耗时操作

我开发常用的的有ListActivity , PreferenceActivity ,TabAcitivty等…

如果界面有共同的特点或者功能的时候,还会自己定义一个BaseActivity.

2.activity生命周期?

Activity生命周期 1 完整生命周期 onCreate()
—> onStart() —> onResume() 可以在手机上看见activity —-> onPause() —> onStop() 看不见了 —-> onDestory() 销毁了

2 前台生命周期 onstart() —-> onStop()之间进行切换 onCreate() —> onStart() —> onResume() 现在有一个activity完全覆盖 onPause() ——> onStop() 如果上面的activity关闭 onRestart() —-> onStart() —> onResume()

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<Activity> lists ; 在application 全集的环境里面
          lists = new ArrayList<Activity>();

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);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            Student stu = new Student();
            oos.writeObject(stu);
            //从文件中把对象读出来 
            ObjectInputStream ois = new ObjectInputStream(arg0);
             Student stu1 = (Student) ois.readObject();

文件/网络

intent.setData(Uri) Uri.fromFile(); //大图片的传递

9.讲一讲对activity的理解?

把上面的几点用自己的心得写出来


新高级面试题1312页PDF

文章篇幅问题,完整版已经整理好,需要的可以查看我的主页!

相关文章

网友评论

    本文标题:字节跳动Andorid-25k+的面试题

    本文链接:https://www.haomeiwen.com/subject/ahuzsktx.html