zoukankan      html  css  js  c++  java
  • Android Activity组件及其生命周期

    Activity是什么?

    Activity 是用户接口程序,几乎所有的 Activity 都要和用户打交道。

    每个 Activity 都提供一个用户界面窗口,一般情况下,该界面窗口会填满整个屏幕,但是也可以比屏幕小,或者浮在其他的窗口之上。

    Activity的四种状态,运行状态,暂停状态,停止状态,销毁状态。

    Activity的生命周期

    名称调用时间
    onCreate(Bundle savedInstanceState) 创建 Activity 时调用。

    设置在该方法中,还以 Bundle 的形式提供对以前储存的任何状态的访问。其中参数 savedInstanceState 对象是用于保存 Activity 的对象的状态。
    onStart() Activity 变为在屏幕上对用户可见时调用。
    onResume() Activity 开始与用户交互时调用(无论是启动还是重启一个活动,该方法总是被调用)。
    onPause() 当 Android 系统要激活其他 Activity 时,该方法被调用,暂停或收回 CPU 和其他资源时调用。
    onStop() Activity 被停止并转为不可见阶段时调用。
    onRestart() 重新启动已经停止的 Activity 时调用。
    onDestroy() Activity 被完全从系统内存中移除时调用。

    该方法被调用可能是因为有人直接调用 finish() 方法或者系统决定停止该活动以释放资源。

     

     activity的创建,启动,关闭

    1、创建

    ① 创建继承自Activity的Activity

    ② 重写需要回调的方法

    ③ 设置要显示的视图

    但这些还不够,我们还要在AndroidManifest.xml文件中对建立的 Activity 进行注册,即在 <application> 标签下添加 <activity> 标签。

    对于主 Activity(即入口Activity),还要为其添加 <intent-filter> 标签。(intent是很重要的概念,Activity通过Intent来表达自己的意图)

    2、启动

    Activity分为入口Activity和其他Activity,他们的启动方式是不同的。

    对于入口Activity,只需在AndroidManifest.xml中配置即可。

    对于其他Activity,可以添加按钮点击事件,进行跳转,跳转代码如下。

    intent = new Intent(MainActivity.this, DemorActivity.class);
    startActivity(intent);

    3、关闭

    在单击事件中添加 finish()方法即可。

    对于其他Activity,关闭后返回上一个Activity,若是入口Activity,则会退出程序,返回主屏幕。

    平常我们用到刷新功能,可用如下代码完成。

    onCreat(null);

    多个Activity的使用

     Activity 数据传递共有三种:

    1. 通过 Intent 传递一些简单的数据。
    2. 通过 Bundle 传递相对复杂的数据或者对象。
    3. 通过 startActivityForResult 可以更方便地进行来回传递,当然前两种方法也可以来回传递。

    通过bundle在两个Activity传递数据。

    package com.example.project_1;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button btn = findViewById(R.id.btn);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //取值
                    String site1 = ((EditText)findViewById(R.id.et_site1)).getText().toString();
                    String site2 = ((EditText)findViewById(R.id.et_site2)).getText().toString();
                    String site3 = ((EditText)findViewById(R.id.et_site3)).getText().toString();
                    String name = ((EditText)findViewById(R.id.et_name)).getText().toString();
                    String phone = ((EditText)findViewById(R.id.et_phone)).getText().toString();
                    if(!"".equals(site1)&&!"".equals(site2)&&!"".equals(site3)&&!"".equals(name)&&!"".equals(phone)){
                        Intent intent = new Intent(MainActivity.this,AddressActivity.class);
                        //创建Bundle对象,保存输入的信息
                        Bundle bundle = new Bundle();
                        bundle.putCharSequence("name",name);
                        bundle.putCharSequence("phone",phone);
                        bundle.putCharSequence("site1",site1);
                        bundle.putCharSequence("site2",site2);
                        bundle.putCharSequence("site3",site3);
                        intent.putExtras(bundle);
                        startActivity(intent);//传递到AddressActivity中
                    }else{
                        Toast.makeText(MainActivity.this,"请将收货地址填写完整",Toast.LENGTH_SHORT).show();
                    }
                }
            });
    
        }
    }
    View Code
    package com.example.project_1;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class AddressActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_address);
            //接收传来的bundle值
            Intent intent = getIntent();
            Bundle bundle = intent.getExtras();
            String name = bundle.getString("name");
            String phone = bundle.getString("phone");
            String site = bundle.getString("site1")+bundle.getString("site2")+bundle.getString("site3");
            TextView tv_name = findViewById(R.id.name);
            TextView tv_phone = findViewById(R.id.phone);
            TextView tv_site = findViewById(R.id.address);
            //输出在xml文件中
            tv_name.setText("姓名:"+name);
            tv_phone.setText("电话:"+phone);
            tv_site.setText("地址:"+site);
        }
    }
    View Code

     调用另一个Activity并返回结果

    实例:选择头像功能。

    (在当前Activity点击选择头像按钮,跳转到头像列表Activity,选好后退出该Activity,并将选择结果呈现在主Activity)

    package com.example.project_1;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;
    
    public class HeadActivity extends AppCompatActivity {
        //头像资源
        private int[] imageId = new int[]{R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.img05};
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_head);
            GridView gridView = findViewById(R.id.grideview);
            BaseAdapter adapter = new BaseAdapter() {//重写监听器方法
                @Override
                public int getCount() {
                    return imageId.length;
                }
    
                @Override
                public Object getItem(int position) {
                    return position;
                }
    
                @Override
                public long getItemId(int position) {
                    return position;
                }
    
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    ImageView imageView;
                    if(convertView==null){
                        imageView = new ImageView(HeadActivity.this);
                        imageView.setAdjustViewBounds(true);
                        imageView.setMaxHeight(150);
                        imageView.setMaxWidth(158);
                        imageView.setPadding(5,5,5,5);
                    }else{
                        imageView = (ImageView)convertView;
                    }
                    imageView.setImageResource(imageId[position]);
                    return imageView;
                }
            };
            gridView.setAdapter(adapter);
            //选项被点击的监听器
            gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent intent = getIntent();
                    Bundle bundle = new Bundle();
                    bundle.putInt("imageId",imageId[position]);
                    intent.putExtras(bundle);
                    setResult(0x11,intent);
                    finish();
                }
            });
        }
    }
    View Code

     接下来引入Fragment

    Fragment介绍

    Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段!想想,如果一个很大的界面,我们 就一个布局,写起界面来会有多麻烦,而且如果组件多的话是管理起来也很麻烦!而使用Fragment 我们可以把屏幕划分成几块,然后进行分组,进行一个模块化的管理!从而可以更加方便的在 运行过程中动态地更新Activity的用户界面!另外Fragment并不能单独使用,他需要嵌套在Activity 中使用,尽管他拥有自己的生命周期,但是还是会受到宿主Activity的生命周期的影响,比如Activity 被destory销毁了,他也会跟着销毁!

    Fragment生命周期:

    在Activity中添加Fragment

    1、直接在布局文件中添加,用<Fragment></Fragment>组件完成。

    2、当Activity运行时添加。

  • 相关阅读:
    modelsim(2)
    【管理心得之十六】我来吐槽 “面试”
    【管理心得之十五】没有100%的答案,只有70%认可的答案
    【管理心得之十四】团队中的“短板”,是你?还是他?
    【管理心得之十三】真正步入轨道的管理,是单调无味的、是枯燥死板的
    【管理心得之十二】拿什么来拯救你我的“协力人员” (后篇)
    【管理心得之十一】拿什么来拯救你我的“协力人员” (前篇)
    【管理心得之十】你是信息的发送方,应尽的责任你做到了吗?
    【管理心得之九】奉劝那些把组织“玩弄于鼓掌之间”的OL们。(别让组织看见此篇)
    【管理心得之八】通过现象看本质,小王和小张谁更胜任?
  • 原文地址:https://www.cnblogs.com/dongao/p/12247541.html
Copyright © 2011-2022 走看看