zoukankan      html  css  js  c++  java
  • Android四大核心组件之Activity

    一、活动生命周期

      

     二、生命周期执行介绍

    当该页面(Activity)被启动时

    会执行onCreate()onStart()onRestart()这三个方法,

    只有当onRestart() 方法执行完后才会处于一个运行状态(Activity running)


    如果另外一个activity 跑到当前正在执行的activity前面了,我们当前的activity就会执行onPause()方法,比如来电话了长按Home键的情况。

    如果从onPause()方法返回到activity页面的时候,会执行一次onResume(),再回到activity。


    如果页面从活动状态,变为不可见状态时,也就是停止状态时候,

    会执行onPause()方法后再执行onStop()方法。 

    如果从onStop()方法处返回到页面时,

    会执行一个onRestart()方法后执行onStart()方法接着再执行onResume()方法后回到页面。

    注意:如果处于onStop()或者onPause()方法时候,页面由于手机内存低、或者被其他软件杀掉的时候,

    再返回页面时候,会从onCreate()方法开始执行,接着onRestart()、onStart()、onResume()


     onDestroy()方法,被系统关闭的时候或者手动的时候才会执行,执行完这个方法后,我们的activity就被彻底关闭了。

     三、Activity方法定义

    活动的整个生命周期由以下Activity方法定义。

     public class Activity extends ApplicationContext {
         protected void onCreate(Bundle savedInstanceState);
    
         protected void onStart();
    
         protected void onRestart();
    
         protected void onResume();
    
         protected void onPause();
    
         protected void onStop();
    
         protected void onDestroy();
     }
    

      

    四、Activity样式修改

    通过添加activity中theme参数可以修改界面的样式,

     如下两个图,可以看出添加theme样式后菜单栏改没了,当然样式可以选择其他的,会有不同效果。

    五、Activity的创建与切换

      1.首先新建一个activity页面,

      用的Android studio,建的比较快,

      如果用eclipse的话需要先创建一个类,并且扩展至Activity,

      然后在AndroidManifest.XML中配置添加页面,

    <activity android:name=".Main2Activity"></activity>
    

      还要在layout中新建一个内容布局,并且在创建的类中的onCreate方法中绑定它。

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
        }
    

      这里我直接通过Android studio创建,省略以上步骤。

        2.在activity1视图中创建一个标签和一个按钮

      注意ID的写法,自定义ID得加上@+/

      

      

      接着回到视图A类,

      编写以下代码

    执行效果如下,点击后跳转到第二个页面

    六、如何关闭掉一个activity

      设计如下,在第二个页面中拖入一个按钮,把当前activity关闭掉

      

    private Button btnButton;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            btnButton =findViewById(R.id.btnClose);
            btnButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    finish();
                }
            });
    
        }
    

      点击关闭后回到页面一

     

    七、activity数据的传送

     设计思路:在页面二中创建一个标签,用来接收来自页面一的数据,

    然后通过按钮“启动第二个页面”把数据带到页面二。

    1.通过putExtra方法和getStringExtra方法实现简单的数据传送。

     

    2.通过Bundle传送复杂类型数据

    执行效果也是一样 的。

     八、activity关闭后数据的回调

      当页面二activity关闭的时候,从页面二把数据传回,然后从页面一获得数据并显示到页面一。

       在页面一想得到一面二传回来的数据,这里就不能用startActivity方法,

      要改用startActivityForResult函数。

      

      并且重载onActivityResult方法,下图中通过data.getStringExtra得到视图二返回的参数

    下图为视图二,这里在finish之前使用setResult将参数传回

    测试如下,先进入视图一,下图中TextView 是默认值,当前没有收到返回值

    接着点击启动第二个页面

    然后点击关闭,这里可以看到已经得到了从页面二返回的数据

    九、用到的部分源码

    package com.ali.application.mytest;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import org.w3c.dom.Text;
    
    public class MainActivity extends AppCompatActivity {
    
        private Button S2;//定义一个按钮
        private TextView tRe;//定义一个标签
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            S2=findViewById(R.id.S2);//通过findViewById查找视图中按钮
    
            tRe=findViewById(R.id.tRe);
    
            S2.setOnClickListener(new View.OnClickListener() {//设置一个事件监听器
                @Override
                public void onClick(View view) {
                    //启动页面2
                    Intent i = new Intent(MainActivity.this,Main2Activity.class);
                    //i.putExtra("val","mytest");
                    Bundle data=new Bundle();
                    data.putString("val","myTest");
                    i.putExtras(data);
    //                startActivity(i);//要取得返回值的话不能用这个函数
                    startActivityForResult(i,0);//这里的0对应onActivityResult方法中的requestCode
    
                }
            });
            System.out.println("Create");
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            String re=data.getStringExtra("val");
    
            tRe.setText(re);
    
            super.onActivityResult(requestCode, resultCode, data);
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            System.out.println("start");
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            System.out.println("resume");
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            System.out.println("pause");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            System.out.println("stop");
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            System.out.println("destroy");
        }
    
        @Override
        protected void onRestart() {
            super.onRestart();
            System.out.println("restart");
        }
    }
    

      

    package com.ali.application.mytest;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class Main2Activity extends AppCompatActivity {
    
        private Button btnButton;
        private TextView tOut;//定义一个标签
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            btnButton =findViewById(R.id.btnClose);
            btnButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    Intent i = new Intent();
                    i.putExtra("val","testResult");
                    setResult(0,i);
                    finish();
                }
            });
    
            tOut =  findViewById(R.id.tOut);
    
            //tOut.setText(getIntent().getStringExtra("val"));
    
            Bundle data=getIntent().getExtras();
            tOut.setText(data.getString("val"));
    
        }
    }
    

      

  • 相关阅读:
    《算法导论》读书笔记
    【原创】POI操作Excel导入导出工具类ExcelUtil
    10-JMM
    09-字节码执行引擎
    08-类加载机制
    07-前端编译与优化(待补充)
    06-字节码指令
    05-类文件结构
    04-垃圾回收(2)
    03-垃圾回收(1)
  • 原文地址:https://www.cnblogs.com/aibk/p/8076737.html
Copyright © 2011-2022 走看看