Android四大核心组件之Activity

1、活动生命周期

  

 2、生命周期执行介绍

当该页面(Activity)被启动时java

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

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


 

若是另一个activity 跑到当前正在执行的activity前面了,咱们当前的activity就会执行onPause()方法,好比来电话了长按Home键的状况。dom

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


 

若是页面从活动状态,变为不可见状态时,也就是中止状态时候,ide

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

若是从onStop()方法处返回到页面时,布局

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

注意:若是处于onStop()或者onPause()方法时候,页面因为手机内存低、或者被其余软件杀掉的时候,this

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


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

 

 3、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();
 }

  

4、Activity样式修改

经过添加activity中theme参数能够修改界面的样式,

 以下两个图,能够看出添加theme样式后菜单栏改没了,固然样式能够选择其余的,会有不一样效果。

 

5、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类,

  编写如下代码

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

6、如何关闭掉一个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();
            }
        });

    }

  点击关闭后回到页面一

 

7、activity数据的传送

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

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

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

 

 

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

执行效果也是同样 的。

 8、activity关闭后数据的回调

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

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

  要改用startActivityForResult函数。

  

  而且重载onActivityResult方法,下图中经过data.getStringExtra获得视图二返回的参数

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

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

接着点击启动第二个页面

而后点击关闭,这里能够看到已经获得了从页面二返回的数据

9、用到的部分源码

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"));

    }
}
相关文章
相关标签/搜索