• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 安卓學習日記——Activity(一)

    四大核心組件——Activity

    簡介:一個Activity代表一個界面,即一個活動。活動開始,則Activity組件啟動,活動結束,則代表一個Activity組件生命周期結束

    • 內部概念

    1)Application
    2)Activity
    3)Activity棧
    4)task
    一整個應用就是一個Application,即平時說的APP
    圖解
    在這里插入圖片描述
    其中123代表的是一個個Activity,3表示是另一個APP里的Activity,Activity都存放在Activity棧里,先進后出。兩個APP進行切換,就形成了任務之間的關系。

    • Activity狀態
      1)Resumed 一個新Activity啟動入棧后,它在屏幕最前端,處于棧的最頂端,此時它處于可見并可交互的**狀態。
      2)Paused當Activity被另一個透明或者Dialog樣式的Activity覆蓋時的狀態。此時它依然與窗口管理器保持連接,系統繼續維護其內部狀態,所以它仍然可見,但它已經失去了焦點故不可與用戶交互。
      3)Stoped 當Activity被另外一個Activity覆蓋、失去焦點并不可見時處于Stoped狀態。
    • Activity生命周期

    七大方法

    public class MyActivity extends Activity{
    //Activity創建時被調用
    protected void onCreate(Bundle savedlnstanceState);
    //Activity可見時被調用
    protected void onStart();
    //Activity重新可見時被調用,接著會調用onStart()
    protected void onRestart();
    //Activity獲得焦點,可進行輸入時被調用
    protected void onResume();
    //Activity失去焦點,但可見時被調用(在其它應用需要內存時,可能會被kills)
    protected void onPause();
    //Activity完全不可見時被調用(會被系統kills)
    protected void onStop();
    //Activity被銷毀時被調用(會被系統kills)
    protected void onDestroy();
    }
    圖解
    在這里插入圖片描述
    運行過程示例
    應用啟動后
    在這里插入圖片描述
    點擊home點后
    在這里插入圖片描述
    重新點擊應用
    在這里插入圖片描述
    關閉應用
    在這里插入圖片描述

    • 七大方法詳解

    onCreate:Activity創建時第一個調用的方法,通常我們在該方法中加載布局文件,初始化UI組件,事件注冊等等
    onStart:在onCreate方法之后調用,用于顯示界面,但用戶還不能進行交互

    onRestart:當一個stoped狀態的Activity被返回時調用,之后再調用onStart進入運行狀態

    onResume:在onStart之后調用,該方法執行完成后,用戶可以進行交互,當前Activity進入resumed狀態。當一個paused狀態的activity被重新返回時,會再次調用該方法,讓Activity進入運行狀態

    onPause:當其它Activity(透明或窗口模式)進入時,該方法會被調用,讓當前Activity進入paused狀態(暫停狀態)。當前Activity還可見但不可交互,如果其它更高優先級的APP需要內存時,當前Activity可能會被銷毀(kill)。當前Activity被返回時會調用onResume方法

    onStop:當其它Activity覆蓋該Activity時,會被調用,當前Activity進入stoped狀態(停止狀態)。不可見,如果其它更高優先級的APP需要內存時,當前Activity可能會被銷毀(kill)。 當前Activity被返回時會調用onRestart方法

    onDestroy:當前Activity被銷毀時調用,通常在該方法中用來釋放資源,當前Activity killed

    • Activity傳遞數據
      方法一
      intent與Bundle使用
      關鍵代碼塊
    	/**
         * 啟動ActivityB,并且傳遞數據
         * @param v
         */
        public  void sendClick(View v){
            //創建一個意圖(想干什么)參數(上下文,要跳轉的組件的字節碼)
            Intent intent=new Intent(this,MainActivityB.class);
            String info=editText_info.getText().toString();
            //封裝要傳遞的數據
            Bundle data=new Bundle();
            data.putString("info",info);
            intent.putExtra("data",data);
            startActivity(intent);
        }
    

    MainActivityB 接受傳遞過來的數據并顯示

    private TextView textView_info;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main_b);
            textView_info=findViewById(R.id.info);
    
            Intent intent=getIntent();
            Bundle data=intent.getBundleExtra("data");
            String info=data.getString("info");
            textView_info.setText(info);
        }
    

    方法二
    使用Intent直接傳遞數據

      public  void sendClick(View v){
            //創建一個意圖(想干什么)參數(上下文,要跳轉的組件的字節碼)
            Intent intent=new Intent(this,MainActivityB.class);
            String info=editText_info.getText().toString();
            intent.putExtra("info",info);
            startActivity(intent);
        }
    

    接收數據代碼

    private TextView textView_info;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main_b);
            textView_info=findViewById(R.id.info);
            Intent intent=getIntent();
            String info=intent.getStringExtra("info");
            textView_info.setText(info);
        }
    

    效果圖
    在這里插入圖片描述
    在這里插入圖片描述

    • 傳遞對象
      方法一
      使用Serializable序列化方式傳遞對象。(消耗性能和資源較大)
      新建一個類,確定要傳遞的對象的屬性
    public class Cat implements Serializable {
        String name;
        int age;
        String type;
    
        @Override
        public String toString() {
            return "Cat{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", type='" + type + '\'' +
                    '}';
        }
    }
    

    傳遞對象

    public void sendObjClick(View v){
            //要傳遞的對象
            Cat cat=new Cat();
            cat.name="皮卡丘";
            cat.age=2;
            cat.type="無上傳說";
    
            Intent intent=new Intent(this,MainActivityB.class);
            intent.putExtra("cat",cat);
            startActivity(intent);
        }
    

    接收對象

     Cat cat= (Cat) intent.getSerializableExtra("cat");
    
            textView_info.setText(cat.toString());
    

    方法二
    使用Parcelable序列化方式傳遞對象。(性能比較高,使用系統自帶的打包方式傳遞數據)
    創建一個類用于確定對象的屬性

    import android.os.Parcel;
    import android.os.Parcelable;
    
    public class Dog implements Parcelable {
        String name;
        int age;
        String type;
    
        @Override
        public String toString() {
            return "Dog{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", type='" + type + '\'' +
                    '}';
        }
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeInt(age);
            dest.writeString(type);
        }
    
        //對象的創建器
        public static final Parcelable.Creator<Dog>CREATOR
                =new Parcelable.Creator<Dog>(){
            public Dog createFromParcel(Parcel in){
                Dog dog=new Dog();
                dog.name=in.readString();
                dog.age=in.readInt();
                dog.type=in.readString();
                return dog;
            }
            public Dog[] newArray(int size){
                return new Dog[size];
            }
        };
    }
    

    傳遞數據

    public void sendObj2Click(View v){
            Dog dog=new Dog();
            dog.name="哮天犬";
            dog.age=1;
            dog.type="看門犬";
            Intent intent=new Intent(this,MainActivityB.class);
            intent.putExtra("dog",dog);
            startActivity(intent);
        }
    

    接收對象

     Dog dog=intent.getParcelableExtra("dog");
    
            textView_info.setText(dog.toString());
    

    兩種方法的區別在于類的繼承不同,Serializable采用的是Java的IO方式傳遞數據,Parcelable則是as自帶的,相較于前者,后者的性能方面會比較高,但是代碼相對復雜。

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

    智能推薦

    安卓ApiDemos學習 app/Activity/SetWallpaper

    墻紙設置的例子,還涉及一些圖片變換的內容 取得當前墻紙 將墻紙設置到imageview上 因為要對圖片進行一些處理,所以打開了catch imageView.setDrawingCacheEnabled(true) 點擊Randomize按鈕時,會隨機生成一個數字,然后從預定義的數據中取出顏色 然后將顏色覆蓋在圖片上,只允許某些顏色通過。 mColors是一個數據,預先定義了一些顏色 用戶點擊 S...

    安卓學習日記——畫布與繪制

    先提一下Draw 9-patch 老版本的Android Studio是在SDK目錄下的Tools里有個draw9patch 新版Android Studio是可以在AS里直接創建的(一開始沒在目錄下找到我也是一臉懵逼) 與傳統的png格式圖片相比,9.png格式圖片在圖片四周有一圈一個像素點組成的邊沿,該邊沿用于對圖片的可擴展區和內容顯示區進行定義。這種格式的圖片在android環境下具有自適應...

    安卓學習日記——Vitamio框架

    Vitamio中文名稱“維他蜜”,是一款Android與IOS平臺上的全能多媒體開發框架,全面支持硬件解碼與GPU渲染。Vitamio能夠流程播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常見格式的視頻,還可以在Android與IOS上跨平臺支持MMS,RTSP,RTMP,HLS等常見的多種視頻流媒體協議,包括點播與直播。 下載地址:http...

    安卓學習日記——NDK開發

    NDK下載地址:https://developer.android.google.cn/ndk/downloads/index.html 解壓完之后配置Path activity_main.xml MainActivity com_example_ndk_MainActivity.h hello.c Android.mk 效果...

    安卓學習日記——圖片緩存組件

    第三方庫 Universal-Image-Loader 框架的特點 1.多線程下載圖片,圖片可以來源于網絡,文件系統,項目文件夾assets中以及drawable中 2.支持隨意的配置ImageLoader,例如線程池,圖片下載器,內存緩存策略,硬盤緩存策略 圖片顯示選項以及其他的一些配置 3.支持圖片的內存緩存,文件系統緩存或者SD卡緩存 4.支持圖片下載過程的監聽 5.根據控件(lmageVi...

    猜你喜歡

    安卓_Activity

    安卓入門 創建你的第一個工程 Layout Name 需要小寫,下面的Backwards Compatibility勾選后可支持低版本安卓系統 左上角可自由選擇工程顯示方式如project、Android,根據自己喜好選擇。 下面就是我們默認創建的Activity中的Java代碼,在路徑中可以找到(MainActivity) 點擊右下角Emulator按鈕整一個界面模擬器,可以看見我們的MainA...

    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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

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