面试题记录第一节——(activity、fragment)
来源:互联网 发布:ios虚拟定位软件 编辑:程序博客网 时间:2024/06/05 17:13
activity
一、问:什么是activity呢?
答:安卓是与用户交互的结果,他提供了一个界面让用户点击、各种滑动等操作。这个界面的存在就是activityd存在的意义。
二、问:activity的四中状态?
答:running - paused - stopped - killed==处于栈顶,正在运行 - 暂停(失去了用户操作的能力,并不一定不可见) - 停止(界面不可见) - 删除状态(activity被系统回收)。
三、问:activity的生命周期有哪些
答:oncrete - onstart- onResume - onRestart - onpause - onstop - ondestroy
场景一:启动:oncrete - onstart- onResume
oncrete :activity被创建时候被调用,
onstart :activity已经被启动,已经用户可见的状态,但是并没有处于前台可见的阶段,也就是还不能进行对activity操作。
onResume:表明activity已经处于前台,并且可以进行操作状态。
场景二:点击home键回到主界面(activity不可见):onpause() - onstop()
onpause():整个activity已经处于停止状态(处于后台),可见但不可操作。和onResume()方法相对应。
onstop():整个activity已经被停止或被新的界面完全覆盖,界面已经完全不可见,只是在后台运行。当调用了次方法之后,你整个手机的系统内存是紧张的,activity可能会被回收。
场景三:当我们再次回到原来activity界面:onRestrat()- onstart()-onResume()
onRestrat():表示activity正在被重新启动,activity正处于由不可见状态变为可见状态。
onstart():activity已经被启动,已经用户可见的状态,但是并没有处于前台可见的阶段,也就是还不能进行对activity操作。
onResume:表明activity已经处于前台,并且可以进行操作状态,和用户进行交互。
场景四:退出activity的时候:onPause() - onstop()-ondestroy()
onPause():整个activity已经处于停止状态(处于后台),可见但不可操作。和onResume()方法相对应。
onstop():整个activity已经被停止或被新的界面完全覆盖,界面已经完全不可见,只是在后台运行。当调用了次方法之后,你整个手机的系统内存是紧张的,activity可能会被回收。
ondestroy():activity正在被销毁,可以做些回收工作。
四、问:android进程的优先级有哪些
答:级别:前台 - 可见 - 服务 - 后台 - 空
前台:正在和用户正在交互的或者与前台绑定的server。
可见:可见进程是用户可见,但是用户还不能操作的进程
服务:后台开启的server服务
后台:处于后台运行的activity
空:优先级最低,知识处于缓存的目的而保留,系统随时可以杀死它
五、问:activity启动模式有哪些
答:
1、standard:标准模式,每一次都会创建一个实例。
2、singletop:栈顶复用模式,如果A实例存在栈顶,就不会去创建实例,如果位置不是位于栈顶,就会创建实例。
3、singletask:栈内复用模式,检查整个任务栈是否存在A实例,如果存在就不会重新创建A实例。并且把A实例移动到栈顶,而A实例之上的所有activity实例都会被删除。
4、singleinstance:独享模式,activity如果在整个项目当中只有一个实例,而且这个activity独享这个任务栈,这种模式叫做singleinstance。用的很少
六、问:fragment为什么被称为第五大组件
答:首先fragment是不属于四大组件,他有自己的生命周期,同时还可以灵活、动态的嵌套activity。所以可以称之为第五大组件。
七、问:fragment加载到Activity的两种方式
答:分别为动态加载、静态加载
a、静态加载,把fragment作为一个xml的标签添加到activity布局当中
b、动态加载,通过fragmentManage和transction来动态加载
步骤:
第一步,通过getfragmentManager创建一个fragment对象。
第二步,通过getfragmentManager创建一个fragmentTransaction对象
第三部,通过Transaction对象来执行增、删、替换等操作。
第四步,通过commit()方法进行提交
八、问:fragmentPagerAdapter与fragmentStatePagerAdapter区别?
答:
由于fragmentStatePagerAdapter它在每次切换viewpager的时候,他是调用的remove()方法,执行内存回收。所以适合界面比较多的情况。
如图:
>
由于fragmentPagerAdapter它在每次切换viewpager的时候,它调用的是detach()方法,执行的是把fragment的UI和activity的UI进行分离,并没有清除内存,所以适合界面较少的情况。
如图:
区别:而使用detach()会将view从viewtree中删除,和remove()不同,此时fragment的状态依然保持着,而remove()是从内存删除。
九、问:fragment的生命周期有哪些?
答:*onAttach() - oncraete()- oncreateview() - onActivityCreate() - onstart() - onResume() - onpause() - onstop() - onDestoryView() - ondestory() - ondetach()
- 启动到显示给用户的生命周期
onAttach():关联activty调用
oncreate():初次创建fragment时调用,这个看起来和Activity中的oncreate()方法一样,但是这里是创建fragment,此时activity并没有创建成功。
oncreateview():系统首次绘制fragment界面的时候调用。
onActivityCreate() :与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,
onstart() :fragment可见时调用(也是绑定在Activity的onstart方法之后)。
onResume():fragment可以和用户交互了(也是绑定在Activity的onResume方法之后)。
- 回退到退出的生命周期
onpause():表示fragment不可以和用户交互(也是绑定在Activity的onResume方法之后)。
onSaveInstanceState():保存当前Fragment的状态。该方法会自动保存Fragment的状态,比如EditText键入的文本,即使Fragment被回收又重新创建,一样能恢复EditText之前键入的文本。
onstop():表示界面不可见(也是绑定在Activity的onstop方法之后)。
onDestoryView():销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过
ondestory():销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。
onDetach():解除与Activity的绑定。在onDestroy方法之后调用。
十、问:fragment之间的通讯?
答:有三种方式**
1、在Fragment中调用Activity中的方法getActivity()。这里直接Intent即可
2、在Activity调用Fragment中的方法,接口回调。
3、在Fragment中调用Fragment中的方法findframentByid。
案例:
public class Fragment01 extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment01,container, false); init(view); return view; } private void init(View view) { Button button = (Button)view.findViewById(R.id.but); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Fragment02 f2 = (Fragment02) getActivity().getFragmentManager().findFragmentById(R.id.fragment02); f2.Updata("改改改改,修修秀秀"); Log.i("Text","点击我干嘛"); } }); }}
public class Fragment02 extends Fragment { private TextView tv; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment02,container, false); init(view); return view; } private void init(View view) { tv = (TextView)view.findViewById(R.id.tv); } public String Updata(String string){ tv.setText(string); return string; }}
public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.fragment01,new Fragment01(),"f1"); ft.replace(R.id.fragment02,new Fragment02(),"f2"); ft.commit(); }}
十一、问:viewpager的setOnpageChangeListener监听方法(课外题)
答:有三个方法**
1、onpagescrolled():此方法在滑动的时候,不停的被触发。
参数1:是滑动的位置。
参数2:是滑动的百分比。
参数3:是滑动的偏移量。
2、onpageSelected():此方法跳转到新页面的时候触发。我们一般在这里改变按钮的状态
3、onpageScrolledStateChanged():此方法是当页面滑动状态改变的时候触发,他有三个状态
状态“0”表示什么都不做。
状态“1”表示开始滑动。
状态“2”表示滑动结束。
- 面试题记录第一节——(activity、fragment)
- 笔试面试题记录(0x01) —— #define
- 面试题记录第二节——(service、Broadcast)
- 面试题记录第二节——(Binder)
- 面试题记录第五节——Asynctask
- 面试题记录第七节——(事件分发)
- 笔试面试题记录
- 面试题记录
- java 面试题记录
- 笔试面试题记录
- 笔试/面试题记录
- 面试题记录(B1)
- 面试笔试题记录
- 面试刷题记录
- SQL面试题记录
- 面试题记录
- Android面试题记录
- 面试题记录
- Oracle 11gR2 RAC修改SCAN IP地址
- 理解java动态代理
- RecycleView获取当前屏幕中itemview的显示区域
- UVA227解题报告
- Java 中的悲观锁和乐观锁的实现
- 面试题记录第一节——(activity、fragment)
- Shell脚本的静态检查工具shellcheck
- Mysql 查询
- oracle 11g RAC 修改public ip ,vip , scan ip
- TensorFlow 基础知识笔记之队列和线程
- 【数据结构与算法】海量数据解决方案 bitmap
- MOOC清华《面向对象程序设计》第8章:栈的实现(采用适配器模式)
- system/bin/mediaserver占用CPU率较高问题
- java绘制shape context极坐标