亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android的Activity怎么應用

發布時間:2023-05-06 17:10:42 來源:億速云 閱讀:254 作者:iii 欄目:開發技術

這篇“Android的Activity怎么應用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android的Activity怎么應用”文章吧。

一 Activity 啟動和結束

1 從當前頁面跳轉到下個頁面, startActivity(原頁面.this,目標頁面.class)

          // 跳轉到下一個頁面
                startActivity(new Intent(MainActivity.this, ActFinishActivity.class));

2 結束返回

finish 結束當前頁面進行返回

 
    @Override
    public void onClick(View view) {
 
        if (view.getId() == R.id.goBack){
            finish();
        }
    }

二 Activity 生命周期

1 Activity 的四種狀態

1> 運行中(Running/Active),這是Activity 位于棧頂庫,是可見的,可以與用戶交互。

2> 暫停(Paused),當Activity 失去焦點,不能跟用戶交互了,但依然可見,就會處于暫停狀態。

當一個新的非全屏的Activity或者一個透明的Activity 放置在棧頂,Activity 就處于暫停狀態。

3> 停止 (Stoped),當一個Activity 被另外一個Activity完全覆蓋,或者點擊Home鍵進入了后臺,這時候就處于停止狀態。這個時候數據還保存著。

4> 銷毀(Destroyed) ,點擊返回鍵或者系統在內存不夠用的情況下就會把Activity 從棧里移除銷毀。

Android的Activity怎么應用

2 流程解讀

1> 在Activity 運行之前,會調用onCreate,onStart,onResume 這三個方法,之后Activity 就處于Running 狀態了

2> 當Activity 暫停時候,會調用onPause, Activity 重新恢復到運行狀態的時候,會運行onResume

3> Activity 處理停止狀態時,會調用onStop。這個時候如果要恢復運行狀態就會調用一個新的方法onRestart,然后再去調用onStart,onResume

4>當Activity被銷毀的時候,會調用onDestroy方法

3 具體功能

1 onCreate: 當Activity第一次被創建時調用。是生命周期開始的第一個方法。在這里我們可以做一些初始化的操作,比如:調用setContentView()方法去加載界面,綁定布局里的一些控件,初始化一些Activity需要用到的數據。之后會調用onStart方法.

2 onStart:當Activity正在變為可見時調用。這個時候Activity已經可見了,但是還沒有出現在前臺還不能跟用戶交互。可以簡單理解為Actvity已經可見但是還沒有出現在前臺。之后會調用onResume.

3 onResume:當Activity可以跟用戶交互時調用,這個時候,這個Activity位于棧的頂部。跟onStart相比,它們都是表示Activity已經可見,但是onStart調用時Activity還在后臺,而調用onResume時,Activity已經進入了前臺,可以跟用戶交互了。之后會調用 onPause.

4 onPause:當Activity暫停時調用這個方法;在這里我們可以用來保存數據,關閉動畫和其它比較耗費CPU的操作;但是在這里做的操作絕對不能耗時,因為如果當前Activity要啟動一個新的Activity,這個新的Activity會在當前Activity執行完畢onPause之后才能進入可見狀態。這個方法之后一般會調用的方法有onStop或者onResume. ==在Android3.0之前,調用這個方法之后,Activity可能會在系統內存緊張時被系統回收==

5 onStop:當Activity進入后臺,并且不會被用戶看到時調用。當別的Activity出現在前臺時,或者Activity會被銷毀時,調用此方法;在這個方法調用之后,系統可能會在內存不夠的情況下回收Activity;在這個方法之后一般會調用onRestart或者onDestroy.

6 onDestroy:這個方法是Activity生命周期中調用的最后一個方法。它會在Activity被銷毀之前調用;Activity銷毀原因一般是我們調用Activity的finish方法手動銷毀,另一個就是系統在內存緊張的情況下去銷毀Activity,以用來節省空間。我們可以通過方法 isFinishing 來判斷Activity是否正在被銷毀。

7 onRestart:這個方法是在Activity處于停止狀態后,又回到可視狀態時調用。之后會調用onResume

4 總結

1 打開新頁面

onCreate --> onStart --> onRume

2 關閉舊頁面

onPause --> onStop --> onDestroy

三 Activity 啟動模式分類

Android的Activity怎么應用

這個模式可以在Mainifest.xml 文件中設定,如果不設定,默認就是standard

Android的Activity怎么應用

1 Standard 標準模式

這個模式啟動的Activity 會按照啟動順序依次壓入到Task 棧中

2 SingleTop 棧頂復用模式

如果棧頂Activity 為我們 要新創建的Activity,那么久不回重復創建新的Activity

3 SingleTask 棧內復用模式

若 需要創建的Activity 已經處于棧中時,此時不會創建新的Activity ,而是將其上面的其他Activity 全部銷毀,使其成為棧頂,

4 SingleInstance 單實例模式

具有此模式的Activity 僅僅單獨處于一個任務棧中

四 啟動模式的設置

1 在Manifest.xml 中指定Activity 啟動模式

<activity            android:name=".MainActivity"            android:exported="true"            android:launchMode="singleTask"            >

2 在啟動Activity 時,在Intent 中指定啟動模式去創建Activity

   Intent intent = new Intent(MainActivity.this, ActFinishActivity.class);                // 棧中存在待跳轉的實例時,重新創建該活動的實例,并且清除原來實例上方所有的實例                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                // 跳轉到下一個頁面                startActivity(intent);

以上兩種方式都能為Activity 設置啟動模式,可是二者還是有差別的。

優先級 :動態指定的優先級較高

限定范圍:靜態指定方式無法為Activity 直接指定 FLAG_ACTIVITY_CLEAR_TOP 標識,

動態指定無法為Activity 指定singleInstance 模式

五 Activity Flags

1 FLAG_ACTIVITY_NEW_TASK

開辟一個新的任務棧

2 FLAG_ACTIVITY_SINGLE_TOP

當棧頂為待跳轉的活動實例之時,則重用棧頂的實例

3 FLAG_ACTIVITY_CLEAR_TASK

跳轉到新頁面的時候,棧中原油的實例都被清空

4 FLAG_ACTIVITY_CLEAR_TOP

棧中存在待跳轉的實例時,重新創建該活動的實例,并且清除原來實例上方所有的實例

六 Intent

各個組件之間信息溝通的橋梁嗎,它用于Android各個組件之間的通信。

* 1 標明本次通信從哪里來嗎,到哪里去,要怎么走

* 2 發起方攜帶本次通信需要的數據內容,接收方從收到的意圖中解析出數據

* 3 發起方若想判斷接收方的處理結果,意圖就要負責讓接收方傳回應答的數據內容。

1 顯式Intent

明確指定要跳轉的Activity

創建方式1 直接初始化

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

創建方式2 setClass

 Intent intent2 = new Intent(); 
 intent2.setClass(MainActivity.this,ActFinishActivity.class);

創建方式3 setComponent

 Intent intent3 = new Intent();
 ComponentName component = new     ComponentName(MainActivity.this,ActFinishActivity.class);
intent3.setComponent(component);

2 隱式Intent

沒有明確要跳轉的目標Activity,只給出一個動作字符串讓系統自動匹配,屬于模糊匹配。

比如說

打電話 ACTION_DIAL

發短信 ACTION_SENDTO

當然了 還可以跳轉自己定義的頁面,不過自己定義的需要設置一下 Manifest.xml

exported = true

IntentFilter在xml中的三個主要的參數:action,categary,data。

        <activity
            android:name=".ActFinishActivity"
            android:exported="true"
            >
            <intent-filter>
                <action android:name="android.intent.action.myselfActivity"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
 
        </activity>
switch (view.getId()){
 
            case R.id.jump_to_tel:
            {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_DIAL);
                Uri uri = Uri.parse("tel:123456789");
                intent.setData(uri);
                startActivity(intent);
            }
                break;
            case R.id.jump_to_sms:
                Intent intent2 = new Intent();
                intent2.setAction(Intent.ACTION_SENDTO);
                // 123456789 為發送目標
                Uri uri2 = Uri.parse("sms:123456789");
                intent2.setData(uri2);
                startActivity(intent2);
                break;
            // 跳轉我自己的頁面
            case R.id.jump_to_my_self:
 
                Intent intent3 = new Intent();
                intent3.setAction("android.intent.action.myselfActivity");
                intent3.addCategory(Intent.CATEGORY_DEFAULT);
                startActivity(intent3);
                break;
 
            default:
                throw new IllegalStateException("Unexpected value: " + view.getId());
        }

七 傳遞數據

1 向目標Activity 傳遞數據

傳遞數據是使用Bundle 來實現的。其內部就是一個Map,用起來也和map 相差無幾

Android的Activity怎么應用

原界面傳遞數據

Intent intent = new Intent(MainActivity.this,ActFinishActivity.class);
// 傳遞信息到下個界面 通過bundle 包裝數據
Bundle bundle = new Bundle();
bundle.putString("params","go on my lady");
intent.putExtras(bundle);
startActivity(intent);

目標界面接收數據

//  獲取數據
Bundle bundle = getIntent().getExtras();
String value = bundle.getString("params");
tv.setText(value);
Log.e("Fibonacci", "onCreate: "+value);

2 回傳信息

這個時候要使用 ActivityResultLauncher 這個東西 了。其目的用于簡化頁面中跳轉獲取返回值以及請求權限。

ActivityResultLauncher必須在onCreate或者onAttach方法下初始化。

在原頁面中代碼

跳轉頁面的時候 是 register.launch(intent);

package com.example.leonardoday1;
 
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
 
import java.net.URI;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    private static final String TAG = "Fibonacci";
    private ActivityResultLauncher<Intent> register;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.send_next_msg).setOnClickListener(this);
        TextView tv = findViewById(R.id.main_tv);
 
        register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if (result != null){
                    Intent intent = result.getData();
                    if (intent != null && result.getResultCode() == Activity.RESULT_OK){
                        // 獲取返回的數據
                        Bundle bundle = intent.getExtras();
                        String string = bundle.getString("params");
                        tv.setText(string);
                        Log.e(TAG, "onActivityResult: " + string);
                    }
                }
            }
        });
    }
 
    @Override
    public void onClick(View view) {
 
        switch (view.getId()){
 
            case R.id.send_next_msg:
            {
                Intent intent = new Intent(MainActivity.this,ActFinishActivity.class);
                // 傳遞信息到下個界面 通過bundle 包裝數據
                Bundle bundle = new Bundle();
                bundle.putString("params","go on my lady");
                intent.putExtras(bundle);
                register.launch(intent);
            }
                break;
 
            default:
                throw new IllegalStateException("Unexpected value: " + view.getId());
        }
 
 
    }
}

在目標頁面的代碼

// 反回信息給上個界面
Intent intent = getIntent();
Bundle bundle = new Bundle();
bundle.putString("params","i have receive your message");
intent.putExtras(bundle);
setResult(Activity.RESULT_OK,intent);
// 返回上個界面
finish();

以上就是關于“Android的Activity怎么應用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南和县| 乌兰察布市| 黎城县| 连平县| 彝良县| 房山区| 上饶县| 河津市| 桃江县| 光山县| 蒙城县| 清水县| 晋江市| 林芝县| 清丰县| 石屏县| 漾濞| 太仆寺旗| 洛宁县| 璧山县| 洪泽县| 北京市| 玛曲县| 视频| 金塔县| 海口市| 铜川市| 泰兴市| 长丰县| 临江市| 盘锦市| 平定县| 新平| 苏尼特左旗| 舟山市| 玉田县| 彰化市| 新丰县| 昌邑市| 临颍县| 观塘区|