android之activity(活动)

如果想仔细了解Activity的知识,可以去官网去看,那里面讲的很详细。
https://developer.android.com/reference/android/app/Activity.h

Acitivity

Acitivity翻译过来是活动的意思,而我的理解是:可以把Acitivity理解为是一个界面。就是你手机屏幕看到的就是一个Acitivity。接下来我就简单讲下怎么使用它,

主要讲以下知识点:

  • Acitivity的启动方式
  • Actiity的传递数据
  • Activity的生命周期
  • Activity启动模式

Acitivity的启动方式之startActivity()

下面我就用代码演示下:先创建两个Aitivity

两个布局文件代码如下:
  1. 布局文件一
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.edu.androidforactivity.MainActivity">

    <TextView
        android:textColor="#ff0000"
        android:textSize="26sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="界面一" />
    <Button
        android:text="确定"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onclick"
        />
</LinearLayout>

2 。 布局文件二

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.edu.androidforactivity.MainActivity">

    <TextView
        android:textColor="#ff0000"
        android:textSize="26sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="界面二" />
    <Button
        android:text="确定"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onclick"
        />
</LinearLayout>
两个Acitivity代码如下:
  1. MainActivity.java
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

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

    public void onclick(View view){
        //两个参数的意思 1,上下文,2,代表你跳转的avtivity.
        Intent intent=new Intent(MainActivity.this,Main2Activity.class);
        startActivity(intent);//开启Activity
    }
}

2 . MainActivity.java代码如下:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class Main2Activity extends AppCompatActivity {

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

运行结果

运行结果就是,点击按钮会MainActivity跳转到Main2Activity中去

Acitivity的启动方式之 startActivityForResult()

你把上面的startActivity()方法换成startActivityForResult()这个也能跳转到第二个Main2Activity。这里我就不讲了,在接下来将acitivity传递数据时在仔细讲这种传递方式。

Actiity的传递数据

我们可以把数据传递放在intent中去,然后获取即可。下面我们就用代码实现。


  1. 回传数据。

两个布局文件代码如下:

activity_main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.edu.androidforactivity.MainActivity">

    <TextView
        android:textColor="#ff0000"
        android:textSize="26sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="界面一" />
    <Button
        android:text="确定"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onclick"
        />

    <TextView
        android:textSize="26sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/result_tv"
        />
</LinearLayout>

activity_main2代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.edu.androidforactivity.MainActivity">

    <TextView
        android:textColor="#ff0000"
        android:textSize="26sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="界面二" />
    <Button
        android:text="确定"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onclick"
        />
    <EditText
        android:id="@+id/input_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入"
        />
</LinearLayout>

这两个布局文件很简单,就不解释了

MainActivity.java代码如下:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
private TextView mTv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTv= (TextView) findViewById(R.id.result_tv);
    }

    public void onclick(View view){
        //两个参数的意思 1,上下文,2,代表你跳转的avtivity.
        Intent intent=new Intent(MainActivity.this,Main2Activity.class);
        startActivityForResult(intent,0);//开启Activity
    }

    //三个参数的含义 1,代表的是哪个控件请求的,2,代表的是哪个传来到额数据,3,意图,一般会携带数据
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode==RESULT_OK){
            String content=data.getStringExtra("content");
            mTv.setText(content);
            Toast.makeText(MainActivity.this,"回传成功",Toast.LENGTH_SHORT).show();
        }
    }
}

Main2Activity.java代码如下:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class Main2Activity extends AppCompatActivity {
    private EditText mEt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        mEt = (EditText) findViewById(R.id.input_et);
    }
    public void onclick(View view){
        Intent intent=new Intent();
        String content=mEt.getText().toString();//获取用户输入的数据
        intent.putExtra("content",content);//把数据放到intent中
        setResult(RESULT_OK,intent);//会回调开启自己的Activity中的onActivityResult()方法
        finish();//销毁当前的activity
    }
}

运行结果如下:

这里写图片描述

回传数据只是简单的实现了下,其实里面的内容还是比较多的,比如activity多了以后,我们就要根据请求码跟返回码来操作。来确定是哪个控件请求的,该返回给哪个activity 学完了回传数据,还有一种方式传递数据,这个比较简单。就不在写出来了。接下来重点要学习的是activity生命周期。

Activity生命周期

先看下官网上给的图

这里写图片描述

首先我们看到这个图有几个循环,我们就每个演示下,这样会比较理解。
首先我们创建个 Activity

MainActivity.java代码如下:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
private static  final  String TAG="TAG";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate: .........");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart: .............");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume: ...........");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause: ..............");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop: ...............");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy: .................");
    }
}

当我们运行时,界面出来后执行的结果是:

这里写图片描述

按返回键后执行的结果是:

这里写图片描述

这就是一个完整的周期,然后我们在创建一个Activity, 假设用A 和 B代表两个Activity,A跳转B中,然后按返回键,看运行结果。

当我们运行时,界面出来后执行的结果是:

这里写图片描述

然后跳转到B 界面中 执行的结果是:

这里写图片描述

按返回键后执行的结果是:

这里写图片描述

再按返回键后执行的结果是:

这里写图片描述

如果我们在A活动中弹出对话框时,是不执行任何的方法。如果对话框是Activity就会执行相应的方法。比如也是两个活动,在A中启动B(B是以对话框形式的)。然后我们按返回键,直到完全退出应用了,看下执行了哪些方法;
可以直接在清单文件中把第二个Activity加句 android:theme=”@style/Theme.AppCompat.Dialog.Alert”就可以了。

运行结果:

这里写图片描述

运行后首先看到A界面,执行的方法是
A onCreat() >- A onStart() >- A onResume
然后跳转到B界面中执行的方法是
A onPause() >-B onCreate() >- B onStart() >- B onResume
然后点击返回键 执行的方法是:
B onPause() >- A onResume() >- B onStop() >- B onDesroy()
然后再点击返回键 执行的方法是:
A onPause() >-A onStop() >- A onDestroy()

Activity启动模式:

假设三个Acitivity A B C .

1 standard

这就是系统默认的启动模式,该模式是每启动一个就会放在栈顶。
这里写图片描述
2 singleTop
该模式是如果该Activity位于栈顶,然后又开启该Activity,就不会创建并进栈。还是用原来的。
这里写图片描述
3 singleTask
该模式是,如果创建的Activity栈里面有的话。就不会创建,并且把该Activity之上的全部出栈,让该Activity位于栈顶。
这里写图片描述
4 singleInstance
该模式是,开辟一个新栈,把新创建的Activity放进去,如果下次还是创建该Activity,就不会再创建咯。

这里写图片描述

其实Activity知识点还是很多的,我只是学习下了Activity的用法,里面太深的知识我也不太懂,想更仔细了解的话就去官网看
https://developer.android.com/reference/android/app/Activity.h

源码下载

https://github.com/songshuilin/AndroidForBlog/tree/master/androidforactivitylife

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值