• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 安卓1:簡答了解安卓生命周期以及頁面跳轉

    標簽: 安卓  1024程序員節

    安卓Activity的生命周期以及跳轉Activity

    安卓是大家在生活中手機使用很廣泛的一個手機系統,這一個系列的博客會簡單講述一下安卓的部分入門知識。由于本科階段學習的知識不是很深入,知識方面或多或少沒辦法完全理解,如有錯誤,歡迎大家指正,互相學習進步。


    在開始對安卓的學習之前,簡單講述了一下配置等基本要素。截止這篇文章發布日期,目前最新的安卓版本是Android11,但是永遠記住代碼學習的第一要素:一定不能用最新的版本,否則新添加的各種特性,不兼容的各種bug是我們目前無法解決的;這里我使用的是Android8.0(其實也算是還是有點新,會有很多改變),編譯器選擇Android Studio 3.0 (這里吐槽一下,同樣是jetbrain公司開發的對java的編譯器,這個編譯器就是沒有IDEA做的好,經常出bug,筆者最開始是默認4.0版本的Android Studio,各種bug無法排除,所以后來重新卸載安裝了3.0)

    在安裝好Android Studio 3.0之后,我們選擇新建一個項目,選擇新建一個空的Activity,然后編譯器會自動幫我們導入一些包(類似于IDEA的Maven,但我個人覺得沒用Maven好用),等待完成,最后的界面就是這樣:
    在這里插入圖片描述
    簡單說兩句
    AndroidMainifest.xml文件是一個應用清單。無論我們怎么創建項目,這個清單都會在我們項目的根目錄下面存在;其主要作用一兩句話說不清楚,目前來講需要了解的就是,第一這個文件里面記錄了整個軟件的包名,第二聲明了安卓經常用到的四大組件,像我們這里新建的項目,有一個activity,那么這個文件里面就聲明了一個activity。此外,這個文件還有一些聲明權限等功能,后面會講到。
    在這里插入圖片描述

    MainActivity就是我們主要寫代碼的地方了,而下面res目錄的layout.xml文件是整個項目的布局文件,一般講就是一個界面,對應一個activity,就像現在新建的項目一樣,可以簡單理解為:xml文件是設計界面的,而對應的activity是實現功能的。
    在這里插入圖片描述
    主要需要講的就是這些,mipmap是存放圖片資源的,有時候這里會有很多不同后綴的文件夾(例如hdpi、mdpi或者xhdpi等),其實就是不同的分辨率。values是方便我們編寫布局文件的,我的理解是可以讓我們自定義,比如我們想讓一個TextView顯示文字是“Hello World”,那么我們一般是直接android:text = “Hello World”,但我們可以在strings.xml定義“Hello,World”這個字符串的名字是text1,然后我們可以直接在TextView空間里面使用text1就行。


    接下來就是講一下安卓的activity的生命周期,以及兩個activity的跳轉

    首先我們在activity_main.xml文件添加一個按鈕,記得設置這個按鈕的id以及onClick方法,直接拖控件那種是不提倡的。
    activity_main.xml文件代碼如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="example.com.lab1.MainActivity">
    
        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="點擊跳轉另一個Activity"
            android:onClick="onClick"
            />
    
    </LinearLayout>
    

    這個時候我們要實現activity的跳轉,就得添加一個activity;這里我們需要注意的是,我們不能簡單把這個組件當成一個新建java類,而是要新建一個activity,否則在前面說過的AndroidMainifest.xml里面以及layout文件夾里面都沒有對應的文件。
    在這里插入圖片描述
    以后新建組件的流程大致如此
    新建完畢之后,我們可以看到layout里面多出了一個xml,在AndroidMainifest.xml里面也自動添加了對第二個activity的聲明:
    在這里插入圖片描述
    在這里插入圖片描述


    這個時候,我們就可以來考慮修改我們MainActivity的代碼了
    主要我們就是在我們重寫的onCreate方法當中設置一個監聽類,監聽我們是不是點擊了那個按鈕;如果我們點擊了,就用Intent來指定當前的activity是哪個,而將要跳轉的activity是那個,然后用startActivity方法進行跳轉,這樣就實現了activity的跳轉了。
    在這里插入圖片描述
    在這里插入圖片描述
    為了讓這個過程更加清晰,我們重寫activity的所有狀態,來分析我們這點擊按鈕的時候,activity的狀態是什么,這里我們修改一下代碼,重寫所有的狀態方法。
    這是第一個activity的代碼:

    package example.com.lab1;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button button1 = findViewById(R.id.button1);
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                    startActivity(intent);
                }
            });
    
        }
    
    
        @Override
        public void onStop(){
            super.onStop();
            Log.d("Lab1-1","第一個activity執行onStop方法");
        }
    
        @Override
        public void onStart(){
            super.onStart();
            Log.d("Lab1-1","第一個activity執行onStart方法");
        }
    
        @Override
        public void onResume(){
            super.onResume();
            Log.d("Lab1-1","第一個activity執行onResume方法");
        }
    
        @Override
        public void onPause(){
            super.onPause();
            Log.d("Lab1-1","第一個activity執行onPause方法");
        }
    
        @Override
        public void onDestroy(){
            super.onDestroy();
            Log.d("Lab1-1","第一個activity執行onDestroy方法");
        }
    
    }
    
    

    這是第二個activity的代碼:

    package example.com.lab1;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    
    public class Main2Activity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
        }
    
        @Override
        public void onStop(){
            super.onStop();
            Log.d("Lab1-2","第二個activity執行onStop方法");
        }
    
        @Override
        public void onStart(){
            super.onStart();
            Log.d("Lab1-2","第二個activity執行onStart方法");
        }
    
        @Override
        public void onResume(){
            super.onResume();
            Log.d("Lab1-2","第二個activity執行onResume方法");
        }
    
        @Override
        public void onPause(){
            super.onPause();
            Log.d("Lab1-2","第二個activity執行onPause方法");
        }
    
        @Override
        public void onDestroy(){
            super.onDestroy();
            Log.d("Lab1-2","第二個activity執行onDestroy方法");
        }
    
    }
    
    

    首先啟動,我們可以看到加載的是第一個activity,先調用了onCreate方法,然后是onStart方法,最后是onResume,表示運行狀態,此時activity已經在模擬器的界面顯示出來;
    在這里插入圖片描述

    然后點擊跳轉,這時第一個activity執行onPause暫停,然后啟動第二個activity,和啟動第一個大致相同,啟動之后,第一個activity執行onStop停止;
    在這里插入圖片描述

    接著點擊返回鍵返回第一個activity,可以看到,第二個先暫停onPause,然后第一個執行onRestart重新啟動,接下來兩步都是一致的onStart和onResume,此時第一個進行運行狀態,而第二個activity就先執行onStop進行停止,接著便是onDestroy進行銷毀;這樣,打開一個activity然后新建一個activity然后關閉第二個activity的過程就是這樣。
    在這里插入圖片描述

    最后關掉這個APP
    在這里插入圖片描述
    可以看到和第二個activity關閉調用的是一樣的。

    這篇博客讓我們對安卓的activity有了一定的了解,當然還有很多我沒有講到,包括點擊事件那個其實有三個方法;學習的路上永無止境,希望多多加油。

    貼一些有關于基本配置方面的比較好的博文
    修改SDK路徑:https://blog.csdn.net/wejfoasdbsdg/article/details/54579289
    修改虛擬機路徑:https://www.cnblogs.com/geeksongs/p/11241320.html

    版權聲明:本文為weixin_44573310原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_44573310/article/details/109261108

    智能推薦

    安卓開發-Activity的生命周期+任務棧

    《一:生命周期函數》 1:函數調用: 2:轉換界面時調用函數順序: 3:生命周期類型: 4:在AndroidManifest: 5.1:在Activity中配置(消除橫豎屏,屏幕大小,鍵盤隱藏對Activity生命周期的影響): 5.2:橫豎屏切換生命周期方法執行順序: 6:Activity生命周期圖: 《二:短信的草稿保存》 正常關閉退出Activity后,調用onDestotry(protec...

    安卓開發入門—什么是Activity?一張圖帶你了解Activity生命周期與創建

    什么是Activity? Activity是Android組件中最基本也是最為常見的四大組件(Activity,Service,Content Provider,BroadcastReceiver)之一。用戶可以用來交互為了完成某項任務。 我們先來學習創建Activity 創建Activity 有兩種方法: 1、直接右鍵創建 不做解釋,很簡單,通常也都是選擇這種方法 2、手動創建 (1)創建類,繼...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    猜你喜歡

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    精品国产乱码久久久久久蜜桃不卡