安卓核心组件(中)——Activity

Activity可以用来表示一个界面,活动开始代表Activity组件启动,活动结束代表Activity生命周期结束。一个android应用必须通过Activity来运行和启动。Activity的生命周期交给系统统一管理。

(一)三个基本状态:

Resumed 一个新的Activity启动入栈后,处于屏幕的最前端,栈的最顶端,处于可以与用户交互的激活状态。

Paused 当Activity被另一个透明或者dialog样式的Activity覆盖的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以依然可见,但是已经失去了焦点,故不可与用户交互

Stoped 当Activity被另外一个Activity覆盖,失去焦点且不可见时处于Stoped状态

(二)Activity七大生命周期方法

onCreate(Bundle savedInstanceState)
Activity创建时第一个调用的方法,通常我们在该方法中加载布局文件,初始化UI组件,事件注册等等
onStart()
在OnCreate方法之后调用,用于显示界面,但用户还不能进行交互
onResume()
在onStart方法后调用,该方法执行完成后,用户可以进行交互,当前Activity进入Resume状态
当一个paused状态的activity被重新返回时,会再次调用该方法,让Activity进入运行状态
onPause()
当其他Activity(透明或窗口模式)进入时,该方法会被调用,让当前Activity进入Paused状态
当前Activity还可见,但不可交互。
如果其他更高优先级的APP需要内存时,当前Activity可能会被销毁。
当前Activity被返回时,会调用OnResume方法
onStop()
当其他Activity完全覆盖该Activity时,会被调用,当前Activity进入Stopped状态
不可见,如果其他更高优先级的APP需要内存时,当前Activity可能会被销毁。
当前Activity被返回时,会调用OnRestart方法
onDestroy()
当前Activity被销毁时调用,通常在该方法中用来释放资源,当前Activity被销毁
onRestart()
当一个stopped状态的Activity被返回时调用,之后调用onRestart方法进入运行状态
在这里插入图片描述
(三)Activity传递数据的两种方式
在android中,不同的Activity实例可能运行在一个进程中,也可能运行在不同的进程中,因此我们需要一个特别的机制帮助我们在Activity之间传递数据。Android中通过Intent对象来表示一条消息,一个Intent对象布局包含有这个消息的目的地,还可以包含消息的内容。
可通过Activity.startActivity(intent)启动另一个Activity的时候,我们再Intent类的构造器中指定了“收件人地址”

直接通过Bundle对象来传递

    //创建一个意图 参数:上下文,要跳转的组件的字节码
    Intent intent = new Intent(this,MainActivityB.class);

    String info = editText.getText().toString();

    //封装要传递的对象
    Bundle data = new Bundle();
    data.putString("info",info);
    intent.putExtras(data);

    //intent.putExtra("info",info);

    startActivity(intent);

通过Intent定义的Bundle对象来传递

(四)Activity处理返回结果
Activity提供了一个机制,跳转到其他activity时,再返回,可以接受到其他activity的返回值,无需start新的当前activity

A:
public void selectClick(View v){
        Intent intent = new Intent(this,PhoneNumberListActivity.class);
        //intent,请求编码
        startActivityForResult(intent,REQUESTCODE_1);

    }

    //重写方法处理返回的结果
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        System.out.println("requestCode:"+requestCode+"  REQUESTCODE_1:"+REQUESTCODE_1+"  RESULT_OK:"+RESULT_OK);
        if(requestCode==REQUESTCODE_1 && resultCode==RESULT_OK){
            String number = data.getStringExtra("number");
            editText_number.setText(number);
        }
    }

B:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String number = numbers[position];
                Intent intent = new Intent();
                intent.putExtra("number",number);
                setResult(RESULT_OK,intent);//设置返回结果
                finish();//结束当前界面
            }
        });

(五)Activity运行时屏幕方向与显示方式
1)android:screenOrientation=""
landscape横屏
portrait竖屏

2)代码控制:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

全屏运行:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);

(六)SharedPreferences保存数据

//还原数据
    @Override
    protected void onResume() {
        super.onResume();
        editText_msg.setText(sp.getString("msg",""));

    }

    //我们在该事件方法里存储数据
    @Override
    protected void onPause() {
        super.onPause();
        String msg = editText_msg.getText().toString();
        if(TextUtils.isEmpty(msg)){
            return;
        }
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("msg",msg);
        editor.commit();//提交
    }

猜你喜欢

转载自blog.csdn.net/asjklm/article/details/88941600
今日推荐