国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android --- Activity

這篇具有很好參考價值的文章主要介紹了Android --- Activity。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

官方文檔-activity

Activity 提供窗口,供應在其中多個界面。此窗口通常會填滿屏幕,但也可能小于屏幕并浮動在其他窗口之上。

大多數應用包含多個屏幕,這意味著它們包含多個 Activity。通常,應用中的一個 Activity 會被指定主 Activity,即用戶啟動應用時顯示的第一個屏幕。然后,每個 Activity 都可以啟動另一個活動,以執(zhí)行不同的操作。

Activity提供一個能讓用戶操作并與之交互的界面。

AppCompatActivity

AppCompatActivity 繼承了 Activity 類,擁有了窗口的特性,是一個可視化界面,MainActivity是一個可視化界面正是由于它繼承了 AppCompatActivity。

配置清單

聲明文件 Activity

在清單文件中聲明 Activity,添加<activity>元素作為<application>元素的子元素,如:

<manifest ... >
? <application ... >
? ? ? <activity android:name=".ExampleActivity" />
? ? ? ...
? </application ... >
? ...
</manifest >

?android:name,必需屬性,用于指定Acitiviy的類名稱。

該步驟在新建activity文件時會自動創(chuàng)建

IntentFilter 意圖過濾器?

Android --- Activity,Android,android

<action android:name="xxxxx" />????????action表示動作,就是想要做的事情的名稱,給當前actitvity起別名,但不能亂起
<category android:name="android.intent.category.DEFAULT" />? ? ? ? 指定當前活動的類型
<data android:mimeType="text/plain" />? ? ? ? 指定活動能發(fā)送的類型

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

?android.intent.action.MAIN -> 入口activity

Intent

Intent是 Activity、Serviece和 BroadcastReceiver三個應用組件之間進行通信的信使,它還可以攜帶數據。

Intent分類

顯示意圖:明確目標組件的意圖

Intent(Context packageContext, Class<?> cls)

常用在操作當前應用的組件

隱式意圖:沒有明確目標組件的意圖

Intent(String action)

常用在使用其他應用的組件時

activity 的啟動(跳轉)

?activity的跳轉

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

一般啟動?

隱式啟動使用隱式意圖

在運行時才知道能打開哪一個界面

隱式啟動的兩種構造方法
* public Intent(String action, Uri uri)
* public Intent(String action)
* action:Activity的別名 ,編譯階段無論寫什么的都不會報錯
* uri: Uri對象,打開的路徑
// 打開百度?
Intent intentS = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
startActivity(intentS);
顯示啟動使用顯式意圖

在運行前知道到底要啟動哪一個界面-使用意圖

Intent(Context packageContext, Class<?> cls)

一般返回

跳轉后返回只需要使用 finish() 結束當前activity?

帶回調啟動

startActivityForResult(Intent intent,int requestCode);

跳轉到第二個頁面,設置請求碼為1000

Intent intent = new Intent(this,ActivityLife.class);
// 參數2:請求碼
startActivityForResult(intent,1000);

帶結果的返回

setResult(int resultCode,Intent data) 設置要返回的結果?

第二個頁面返回數據:

 // 通過startActivityForResult啟動activity-返回結果
    public void backRes(View view) {
        // 設置結果
        Intent intent = new Intent();  //此時intent不作為跳轉使用,而是用來傳遞返回的數據
        intent.putExtra("返回的數據","第二個界面返回的是10000000");
        /*參數1:請求碼 參數2:返回的數據*/
        setResult(RESULT_OK,intent);
        finish(); //結束當前Acticity
    }

?在第一個頁面調用 onActivityResult 方法處理返回的數據:

如果通過 startActivityForResult 啟動了第二個activity,當第二個activity處理結束后,再回到當前activity時,一定會自動回調 onActivityResult 方法 。在 onActivityResult 方法中我們可以處理第二個activity返回的結果。(如。拍照后得到的照片,從圖庫中選取的圖片)

  • 參數1 requestCode:請求碼。當有多個 startActivityForResult 時,可以用來判斷該結果來自于哪個activity,從而進行什么操作
  • 參數2 resultCode:結果碼 0 = RESULT_CANCEL->取消 | -1 = RESULT_OK 正確處理后返回。判斷它是為了判斷新開的activity有沒有處理完這些事
  • 參數3 Intent (可以為空):返回的結果存放在這里。通過 getStringExtra() 獲取數據(此時已經知道結果是String類型的數據)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 判斷新開的activity返回的結果
        /* 當返回結果都是成功時,請求碼==1000則進行操作 */
        if(resultCode == -1){
            if(requestCode == 1000){
                assert data != null;
                Log.e("ActivityWithResults","自動進入onActivityResult requestCode:"+requestCode+",resultCode:"+resultCode+",返回的數據"+data.getStringExtra("返回的數據"));
            }
        }

Intent攜帶數據?

intent.putExtra(String name,XXX value) 保存數據

intent.getXXXExtra(String name) 獲取數據

activity 之間數據傳遞

getIntent()獲取攜帶數據的意圖

  • 傳遞簡單內容

A的activity(傳遞)

  Intent intent = new Intent(this,ActivityLife.class);
  //添加參數
  intent.putExtra("傳遞的String類型參數","這是上一個頁面?zhèn)鬟f過來的String類型參數");
  intent.putExtra("傳遞的double類型參數",24.99);
  intent.putExtra("傳遞的int類型參數",24);
  intent.putExtra("傳遞的bool類型參數",false);
  startActivity(intent);

B的activity(接收)

// 獲取上一個頁面?zhèn)鬟f過來的數據,獲取數據時有些需要給出默認值
Intent getIntent = getIntent();
String dataString = getIntent.getStringExtra("傳遞的String類型參數");
int dataInt = getIntent.getIntExtra("傳遞的int類型參數",1);
double dataDouble = getIntent.getDoubleExtra("傳遞的double類型參數",2.1);
boolean dataBool = getIntent.getBooleanExtra("傳遞的bool類型參數",true);

TextView textView = findViewById(R.id.show);
textView.setText("上一個頁面?zhèn)鬟f是數據"+dataString+dataInt+dataDouble+dataBool);
  • 傳遞對象內容?

intent.getSerializableExtra(String name)? 獲取序列化對象數據

新建一個Student對象類

package com.example.androidstudiostudy.data;

import java.io.Serializable;

// 將對象序列化,序列化的作用
/* 1.想把內存中的對象保存到一個文件活數據庫中時
 * 2.想利用套接字Socket在網絡中傳遞對象*/
public class Student implements Serializable {
    private String name;
    private  int age;
    private  double money;
    private  boolean check;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public boolean isCheck() {
        return check;
    }

    public void setCheck(boolean check) {
        this.check = check;
    }

    public Student(String name, int age, double money, boolean check) {
        this.name = name;
        this.age = age;
        this.money = money;
        this.check = check;
    }
}

A頁面?zhèn)鬟f:

// 實例化一個新建的 Student 對象
Student student1 = new Student("沈成林",23,200000.999,true);
// 參數1:String name - 本次數據的名稱
// 參數2:@Nullable Serializable value - 序列化數據對象
intentC.putExtra("data_object",student1);
startActivity(intentC);

B頁面接收:?

Intent getIntent = getIntent();
// 獲取對象數據 - 強轉成 Student 對象
Student student = (Student) getIntent.getSerializableExtra("data_object");
if (student != null) {
  TextView textView2 = findViewById(R.id.show2);
  textView2.setText("上一個頁面?zhèn)鬟f是數據"+student.getName()+student.getAge()+student.getMoney()+student.isCheck());
else {
 // 處理student對象為空的情況,比如給出一個默認值或者顯示錯誤信息
   TextView textView2 = findViewById(R.id.show2);
   textView2.setText("上一個頁面未傳遞有效的Student對象");
        }

activity 的生命周期

Android --- Activity,Android,android

  • onCreate()?在系統(tǒng)創(chuàng)建?activity 時觸發(fā),完成加載布局和初始化的工作。
  • onStart() 可以理解為啟動狀態(tài),此時的界面還沒能完全的展示出來, 還在準備中
  • onResume() 說明activity已經完全進入到了前臺準備完成,可以和用戶進行交互了,只有經歷此方法,才能進入運行狀態(tài)。
  • onPause() 當activity進入到不可操作的狀態(tài)時,會回調該方法。

何時會進入到不可操作的狀態(tài)?

有另一個activity進入到了前臺(本activity被部分擋住了)。此時雖然不可操作,但是部分可見的

  • onRestart()
  • onStop() 當activity完全看不到了,就會回調該方法
  • onDestory() 當要退出activity的時候,就會執(zhí)行這個方法

當有一個活動A來到前臺完全啟動后,有一個活動B也來到前臺,慢慢啟動時,A就會進入到onPause()方法,暫?;顒?,當B完全準備好后,A就會徹底的停止,進入onStop()方法

activity的四種狀態(tài)

  • 運行狀態(tài):可見且可操作
  • 暫停狀態(tài):可見但不可操作
  • 停止狀態(tài):不可見,但對象存在
  • 死亡狀態(tài):對象不存在

activity 狀態(tài)變化

運行-死亡:onPause() ->onStop()->onDestory()

死亡-運行:onCreate() ->onStart()->onResume()

運行-停止:onPause() ->onStop()

停止-運行:onRestart()->onStart()->onResume()

運行-暫停:onPause()

暫停-運行:onResume()

activity的Task Stack(任務棧?)

棧:后進先出

一個應用啟動,系統(tǒng)就會為其創(chuàng)建一個對應的任務棧來存儲并管理該應用的Activity對象。

只有棧頂的activity才會被顯示。

系統(tǒng)中會有多個應用,同時也會有多個任務棧。

當前應用的任務棧會在我們打開其他應用或者轉到主屏幕時轉移到后臺,在后臺時,任務中的所有 activity 都會停止,但任務的返回堆棧保持不變,即當其他任務發(fā)生時,任務會失去焦點。

?當它回到前臺時,會從上次停下的地方繼續(xù)執(zhí)行。

Android --- Activity,Android,android

Android --- Activity,Android,android

Android --- Activity,Android,android

由于返回堆棧中的 activity 絕不會重新排列,因此,應用中的一個 activity 可能會多次實例化,即使來自不同的任務也是如此,如果不想啟動多次,可以管理activity的啟動模式。

activity 的四種啟動(加載)模式

Standard? 標準模式 (默認)

每一次調用startActivity()都會創(chuàng)建一個新的實例,不管棧內是否存在該實例,打開就會放入任務棧,返回時依次從后退棧。

Android --- Activity,Android,android

在清單文件中設置啟動模式:

android:launchMode="standard"

Android --- Activity,Android,android

Android --- Activity,Android,android

SingleTop 頂部復用

頂部是你正想要打開的activity,直接復用,不會新建實例,如果沒有,則會新建實例再放入棧中。

注意,一定要在頂部,不然退棧順序和標準模式一樣

?在清單文件中設置啟動模式:

android:launchMode="singleTop"

從MainActivity -> MainActivity->MainActivity->?MainActivity

此時頂部就是要打開的activity,直接復用,所以只返回一次就到了主頁

Android --- Activity,Android,android

SingleTask 棧內復用模式

想打開已經打開過的 activity B,此模式會保證棧中只有一個,會彈出B之后的所有activity,保證它重回棧頂

Android --- Activity,Android,android

android:launchMode="singleTask"

MainActivity ->ButtonActivity ->ConstraintActivity ->MainActivity

只返回一次就回到主頁,因為此時想打開MainActivity,但棧中此時已經有了,根據棧內復用的特性它會退出MainActivity后的所有activity, ButtonActivity ->ConstraintActivity

Android --- Activity,Android,android

SingleInstance 全局唯一模式

想要打開新activity,會放在一個新的任務棧中且該Task有且只有一個activity實例,如果已經創(chuàng)建過該activity實例,則不會再創(chuàng)建新的任務棧,只會將之前的喚醒。

Android --- Activity,Android,android

<activity
    android:launchMode="singleInstance"
    android:name=".MainActivity"
    android:exported="true" >
    <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

MainActivity ->ButtonActivity ->ConstraintActivity ->MainActivity

返回到ButtonActivity后再返回就直接回到了主頁。這是由于MainActivity在一個單獨的任務棧中,在第一次返回的時候已經被撤銷了。

Android --- Activity,Android,android文章來源地址http://www.zghlxwxcb.cn/news/detail-855939.html

到了這里,關于Android --- Activity的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Android Studio系列-Activity單元測試,字節(jié)Android高級崗

    Android Studio系列-Activity單元測試,字節(jié)Android高級崗

    新建Activity單元測試類 =============== package com.devilwwj.unittestdemo; import android.content.Intent; import android.test.ActivityUnitTestCase; import android.test.suitebuilder.annotation.MediumTest; import android.widget.Button; /** Created by wwj_748 on 2016/2/22.17.12 */ public class LoginActivityTest extends ActivityUnitTestCase { private Inten

    2024年04月25日
    瀏覽(27)
  • Android復習(Android基礎-四大組件)——Service與Activity通信

    Android復習(Android基礎-四大組件)——Service與Activity通信

    我們前面學會了啟動和停止服務的方法,但是服務雖然是在活動里啟動的,但是啟動服務之后,活動與服務之間基本沒什么關系了。 正常情況,我們在Activity里調用startService()方法啟動MyService這個服務,然后MyService的onCreate()和onStartCommand()方法就會得到執(zhí)行。之后服務會一直處

    2024年02月13日
    瀏覽(20)
  • Android內嵌Unity (Activity)

    Android內嵌Unity (Activity)

    Unity2019.4.4 AndropidStudio4.2.1 參考文檔: Android內嵌Unity并實現(xiàn)互相跳轉的實例代碼_Android_腳本之家 Android Fragment中加載,嵌套Unity視圖_unity 導入并作為fragment_周灬浩的博客-CSDN博客 本文只實現(xiàn)了Activity整個切換過去,而Fragment,這種像h5似的與app共存,目前還未實現(xiàn),可參考的第二

    2024年01月18日
    瀏覽(22)
  • Android Activity 動畫如何實現(xiàn)

    在 Android 中,你可以使用 Activity 轉場動畫來實現(xiàn) Activity 之間的切換動畫效果。以下是一些常見的 Activity 轉場動畫的實現(xiàn)方法: 1. 使用 XML 文件定義動畫效果: 首先,在 res/anim 目錄下創(chuàng)建 XML 文件來定義你的動畫效果。例如,你可以創(chuàng)建 fade_in.xml 和 fade_out.xml 文件來定義淡入

    2024年02月09日
    瀏覽(16)
  • Android Activity啟動過程詳解

    Android Activity啟動過程詳解

    1,《android系統(tǒng)啟動流程簡介》 2,《android init進程啟動流程》 3,《android zygote進程啟動流程》 4,《Android SystemServer進程啟動流程》 5,《android launcher啟動流程》 6,《Android Activity啟動過程詳解》 1,《Android 源碼下載和編譯》 2,《android 11源碼編譯和pixel3 刷機》 3,《Andro

    2024年02月09日
    瀏覽(20)
  • Android 后臺啟動Activity適配

    在Android 9及以下版本,后臺啟動Activity相對自由,但是如果在Activity上下文之外啟動Activity會有限制。 所以此時需要給intent添加flag:FLAG_ACTIVITY_NEW_TASK。 在Android版本10及以后版本, 引入了后臺執(zhí)行限制,限制了應用在后臺執(zhí)行操作的能力。非核心任務的后臺啟動 Activity 可能會

    2024年02月10日
    瀏覽(19)
  • Android Activity啟動流程一:從Intent到Activity創(chuàng)建

    Android Activity啟動流程一:從Intent到Activity創(chuàng)建

    關于作者:CSDN內容合伙人、技術專家, 從零開始做日活千萬級APP。 專注于分享各領域原創(chuàng)系列文章 ,擅長java后端、移動開發(fā)、人工智能等,希望大家多多支持。 學習前,建議有相關知識儲備: 【Android 基礎】 應用(Application)啟動流程 通過本文你可以學習到Activity啟動流

    2024年02月10日
    瀏覽(20)
  • Activity 的啟動流程(Android 13)

    Activity 的啟動流程(Android 13)

    Activity 的啟動過程分為兩種:一種是普通 Activity 的啟動過程,另一種是根 Activity 的啟動過程。普通 Activity 指的是除應用程序啟動的第一個 Activity 之外的其他 Activity。 根 Activity 指的是應用程序啟動的第一個 Activity,因此,根 Activity 的啟動過程一般情況下也可以理解為應用程

    2024年02月11日
    瀏覽(31)
  • Android開發(fā)筆記(三)—Activity篇

    Android開發(fā)筆記(三)—Activity篇

    (1)從當前頁面跳到新頁面: startActivity(new Intent(源頁面.this,目標頁面.class)) (2)從當前頁面回到上一個頁面,相當于關閉當前頁面: finish() onCreate:創(chuàng)建活動。把頁面布局加載到內存,進入了初始狀態(tài)。 onStart:開始活動。把活動頁面顯示在屏幕上,進入了就緒狀態(tài)。 on

    2024年02月06日
    瀏覽(23)
  • Android 四大組件之Activity詳解

    Android 四大組件之Activity詳解

    ??最近在整理Android方面的知識,也算是對Android知識的一個復習總結。 ??Activity是Android組件中最基本也是最為常見用的四大組件之一,它提供一個可視化的用戶界面,放置各種UI組件,與用戶進行交互。一般來說,你所能看到界面都屬于Activity。 右擊包名——New——Acti

    2024年04月15日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包