面试题记录第一节——(activity、fragment)

本文详细介绍了Android中的Activity概念、四种状态及生命周期,包括不同场景下的状态转换。此外还讲解了Activity的启动模式、进程优先级、Fragment的基础知识及其与Activity的交互方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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”表示滑动结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值