1. 程式人生 > >android之activity(活動)

android之activity(活動)

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,就不會再建立咯。

這裡寫圖片描述

原始碼下載

相關推薦

androidactivity(活動)

Acitivity Acitivity翻譯過來是活動的意思,而我的理解是:可以把Acitivity理解為是一個介面。就是你手機螢幕看到的就是一個Acitivity。接下來我就簡單講下怎麼使用它, 主要講以下知識點: Acitivity

AndroidActivity之間傳遞對象

this .get tin 方式 art desc 內容 ext pri 在非常多時候,我們須要在Activity之間傳遞對象,比方當你點擊了某列表的item,須要傳遞給下一個Activity該對象,那我們須要該怎麽做呢? Android支持兩種傳遞對象的方式。一種

AndroidActivity生命週期簡介

概述 有圖有真相,所以先上圖: 上圖是從Android官網截下的Activity的生命週期流程圖,結構非常清晰,它描述了Activity在其生命週期中所有可能發生的情況以及發生的先後順序,下面就將結合此圖詳細介紹一下Activity的生命週期。 --- --- Activity四大

AndroidActivity間的資料傳遞

主佈局 <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"

AndroidActivity全面解析

前言 基於最近要準備去面試,特意系統的複習了下Android基礎,看到Activity這塊時,發現很多都忘了,而且之前也沒有系統的學習和寫筆記記錄,所以,特此寫下這篇關於Activity的一些理解,旨在幫助大家更好的理解Activity. Activity是

AndroidActivity系列總結(一)--Activity概述

本文內容建立 Activity實現使用者介面在清單檔案中宣告 Activity啟動 Activity啟動 Activity 以獲得結果結束 Activity管理 Activity 生命週期實現生命週期回撥儲存 Activity 狀態處理配置變更協調 Activity 是一個應用元件,使用者可與其提供的螢幕進行

AndroidActivity生命週期總結(二)

     上一次寫了一下正常情況下的生命週期,這一次在這裡對異常狀態的生命週期進行一個個人的總結。       Activity除了使用者正常的操作所導致的生命週期方法的呼叫,但是還有一些極端的情況會導致Activity 生命週期  無法按照正常的情況去呼叫。下面具體的分析異

AndroidActivity的三種狀態陳述

Activity存在三種狀態 ①Resumed重新啟動 activity回到螢幕的前面或者又獲得使用者的焦點,處於這種狀態的窗體使用者可以操作。 ②Paused暫停 什麼時候會出現暫停?當另外一個activity在前面或者得到焦點的時候,當前的activity就會處於暫停狀

Android Activity生命週期

1.啟動Activity:系統會先呼叫onCreate方法,這是生命週期第一個方法,然後呼叫onStart方法,最後呼叫onResume,Activity進入  執行狀態。 onCreate方法:一般做一些初始化工作,比如setContentView去載入佈局資源,初

AndroidActivity生命週期淺析(一)

  Activity作為四大元件之一,出現的頻率相當高,基本上我們在android的各個地方都能看見它的蹤影,因此深入瞭解Activity,對於開發高質量應用程式是很有幫助的。今天我們就來詳細地聊聊Activity的生命週期,以便我們在以後的開發中能如魚得水。

淺談AndroidActivity Decor View建立流程介紹

6 Activity DecorView建立流程介紹 上頭已經完整的介紹了Activity的啟動流程,Activity是如何繫結Window,Window的décor view是如何通過ViewRootImpl與WMS建立關聯的,也就是說,整個框架已經有了,唯一缺的就是Ac

淺談AndroidActivity 視窗顯示流程介紹(二)

7.3 Activity Décorview佈局(layout) Measure確定Décor View以及child views的大小,layout則是確定child view在其parent view中的顯示區域,只有layout結束,view的left,right,t

淺談AndroidActivity 視窗顯示流程介紹(一)

7 Activity 視窗顯示流程介紹 Activity 視窗顯示,其實就是Décor View繪製並顯示的過程,但是在繪製之前,Décor View需要先做下面兩件事情: 1)  確定Décor View的大小 2)  對Décor View進行佈局操作,也就是確定Déc

AndroidActivity的框架原理分析

這一側的Layer物件,而操作Layer物件的目的就是為了修改Activity元件的UI。         在前面Android應用程式與SurfaceFlinger服務的關係概述和學習計劃和Android系統Surface機制的SurfaceFlinger服務簡要介紹

Android活動的建立

    所謂主活動,就是單擊桌面應用程式圖示時首先開啟的活動,具體建立過程如下: 1. 開啟Android Studio,新建一個專案MainActivity,並選擇Add No Activity; 2. 在src/main/java中的預設包中新增一個新類MyActivi

androidfragment活動棧單例

本文主要記錄一些零碎的東西 最近參加了一個做地圖的公司的面試,怎麼說呢,反正問的我都不會,問題感覺偏向記憶體的顯示優化方向,比如Bitmap佔記憶體大小啦之流,只怪自己學業不精。 專案還要繼續,在寫專案時,發現fragment的活動棧有些問題,回想起面試官問過這個問題 ,研

淺談AndroidActivity觸控事件傳輸機制介紹

8 Activity觸控事件傳輸機制介紹 當我們觸控式螢幕幕的時候,程式會收到對應的觸控事件,這個事件是在app端去讀取的嗎?肯定不是,如果app能讀取,那會亂套的,所以app不會有這個許可權,系統按鍵的讀取以及分發都是通過WindowManagerService來完成

AndroidActivity的啟動模式

在Android中每個介面都是一個Activity,切換介面操作其實是多個不同Activity之間的例項化操作。在Android中Activity的啟動模式決定了Activity的啟動執行方式。 Android總Activity的啟動模式分為四種: Activity啟動模式設定:         <a

android Activity lifecycle

當頁面載入一個新的Activity 時會呼叫預設實現的三個方法,依次為:onCreate();onStart();onResume(); 當這三個方法被依次執行完以後,該Activity 就可以與使用者互動了。 為:Activity is running. 當頁面按返回鍵時

Androidactivity的生命週期

一、四大元件之一的Activity元件,在應用中一個activity可用來表示一個介面,中文意思為“活動”,即一個活動 開始,代表activity元件啟動,活動結束,activity的生命週期結束。一個android應用鼻血通過activity來啟動和執行。activity