面试题记录第一节——(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”表示滑动结束。

原创粉丝点击