1. 程式人生 > >activity透明主題引起生命週期的變化

activity透明主題引起生命週期的變化

以前開發時,一直沒有留意activity如果主題背景透明,對生命週期有什麼影響呢?

測試方式:編寫demo

配置檔案(AndroidManifest)中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lcl.view">

    <application
        android:allowBackup="true"
        android:icon
="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN"
/>
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Sec" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> </application>
</manifest>

MainActivity中

package com.lcl.view;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("MM", "onCreate");
        // Activity正在被建立;可以做初始化操作 。比如呼叫setContentView載入介面佈局資源,
        // 初始化Activity所需資料
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("MM", "onRestart");
        //Activity重新啟動,Activity從不可見到可見,onRestart會被呼叫
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("MM", "onStart");
        //Activity正在被啟動;此時,Activity可見,但是還沒有出現在前臺,無法和使用者互動,可理解為使用者不可見
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("MM", "onResume");
        //Activity已經可見,並且出現在前臺並開始活動;與onStart()方法都表示Activity已經可見,
        // 區別是onStart()是後臺可見,onResume()是前臺可見
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("MM", "onPause");
        //表示Activity正在停止,正常情況下,緊接著onStop會被執行
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("MM", "onStop");
        //Activity即將停止,可以做一些回收但不太耗時操作
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("MM", "onDestroy");
        //表示Activity即將被銷燬,此時可以做一些回收和資源釋放操作
    }

    public void onClick(View view){
        Intent i = new Intent(MainActivity.this,Sec.class);
        startActivity(i);
    }
}

Sec中

package com.lcl.view;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

/**
 * Created by liuchunliang on 2017/2/21.
 */

public class Sec extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sec);
        Log.i("MM", "Sec onCreate");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("MM", "Sec onRestart");
        //Activity重新啟動,Activity從不可見到可見,onRestart會被呼叫
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("MM", "Sec onStart");
        //Activity正在被啟動;此時,Activity可見,但是還沒有出現在前臺,無法和使用者互動,可理解為使用者不可見
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("MM", "Sec onResume");
        //Activity已經可見,並且出現在前臺並開始活動;與onStart()方法都表示Activity已經可見,
        // 區別是onStart()是後臺可見,onResume()是前臺可見
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("MM", "Sec onPause");
        //表示Activity正在停止,正常情況下,緊接著onStop會被執行
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("MM", "Sec onStop");
        //Activity即將停止,可以做一些回收但不太耗時操作
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("MM", "Sec onDestroy");
        //表示Activity即將被銷燬,此時可以做一些回收和資源釋放操作
    }
}

開始執行程式 執行週期:
01

點選跳轉 執行週期:
02

按下返回鍵 執行週期:
03

我們來分析一下:
首先是MainActivity從建立->啟動->到使用者可見,

然後點選跳轉時MainActivity先暫停然後停止,但是呢因為是透明主題,所以使用者可見,沒有執行onStop()方法,Sec 中onCreate()建立,然後啟動,最後呈現給使用者,

當我們按下返回鍵時,Sec 先執行onPause()還是因為採用透明主題,所以沒有執行onStop(),MainActivity中,沒有執行onRestart() onStart()而是執行了onResume,因為MainActivity已經建立,只是由使用者不可見到使用者可見,所以只執行了onResume(),然後Sec 繼續執行onStop()和onDestroy().

實踐出真知,大家也多動手實驗一下吧。

相關推薦

activity透明主題引起生命週期變化

以前開發時,一直沒有留意activity如果主題背景透明,對生命週期有什麼影響呢? 測試方式:編寫demo 配置檔案(AndroidManifest)中 <?xml version="1.0" encoding="utf-8"?> <

複習 activity生命週期 手機鎖屏時生命週期變化

onCreat() 不可見不可互動 建立時呼叫 onStart()是activity介面被顯示出來的時候執行的,使用者可見,包括有一個activity在他上面,但沒有將它完全覆蓋,使用者可以看到部分activity但不能與它互動      建立時或者從後臺重新回到前臺時呼

兩個Activity跳轉時 生命週期函式的變化

Activity 的生命週期: 生命週期函式呼叫時機 onCreate 在Activity物件被第一次建立時呼叫 onStart當Activity 變得可見是呼叫該函式 onResume當Activity開始準備與使用者互動時呼叫該方法 onPause當系

android Activity切換屏 生命週期變化問題

1、不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次 2、設定Activity的android:configChanges="orientation"時,切屏還是會重新呼叫各個生命週期,切橫、豎屏時只會執行一次 3

Activity跳轉生命週期變化--SingleTask模式

10-21 01:22:46.969 11255-11255/com.lffd.ipcdemo I/TAG: com.lffd.ipcdemo.MainActivity---onCreate() 10-21 01:22:46.988 11255-11255/com.lffd

橫豎屏切換時activity生命週期變化的總結

activity的生命週期變化想必大家都耳熟能詳,但是橫豎屏切換時activity生命週期變化很多人肯定還很迷糊,最近在網上查詢的資料總結的大都不全面,最後在部落格園上看到一哥們總結的挺好, so,自己也寫了個demo測試了一下,發現橫豎屏切換時activity生命週期不僅

兩個Activity切換時的生命週期

兩個Activity切換時的生命週期: 舊Activity記為ActivityOld,新Activity記為ActivityNew,從舊Activity開啟新Activity開始記錄: ActivityOld#onPause() ActivityNew#onCreate() Ac

Fragment 1 切換到 Fragment 2時生命週期變化

1、通過 add hide show 方式來切換 Fragment Fragment1 的生命週期變化為:onCreate()、onCreateView、onStart()、onResume() 回撥 onHiddenChanged() 方法 Fragment2 的生命週期變化

Activity與Fragment的生命週期詳解

在安卓中Activity與Fragment是非常相似的兩個類,它們各自都擁有自己的生命週期,且都可以用來顯示佈局檔案中的檢視。其中Activity是通過setContenView()顯示檢視,而Fra

Android測試Activity和Fragment的生命週期

Activity的生命週期有7個函式,Fragment的生命週期有11個函式。 Activity生命週期除上述6個方法還有一個Restart()方法,該方法在該Activity從不可見(仍存在)到重新可見時呼叫。 測試程式碼如下: import android.a

Activity與Fragment的生命週期

一、Activity 生命週期 二、Fragment 生命週期 三、對比圖 四、測試程式碼 package com.goso.testapp; import android.app.Activity; import android.app.ListFragmen

ViewPager切換Fragment生命週期變化

很久沒有寫部落格了,今天學習了MD的TabLayout ,使用到了ViewPager,於是對於很久以來的一個疑問:ViewPager切換Fragment生命週期是如何變化的進行了一個測試。 本文研究了: 1. ViewPager2個相鄰Fragment之間的

Activity與Fragment 的生命週期對比

Fragment是3.0以後的東西,為了在低版本中使用Fragment就要用到android-support-v4.jar相容包,而FragmentActivity就是這個相容包裡面的,它提供了操作Fragment的一些方法,其功能跟3.0及以後的版本的Acti

Activity不同情況下生命週期

想要徹底弄清楚Activity在不同情況下的生命週期需要先掌握Activity的一些基礎知識 Activity完整的生命週期如下圖: 知道了Activity完整的生命週期之後還需要知道Activity的啟動模式。 Activity四種啟動模式:

Activity#finish() 對其生命週期的影響

如果在 Activity#onCreate() 方法中呼叫 finish() 方法,其生命週期會發生什麼變化? 實驗環境: compilesdksion=25.0.3; com.android.support:appcompat-v7:25.3.1

Android Fragment的FragmentTransaction 操作和對應的生命週期變化

1. Fragment的生命週期和Activity的生命週期 Fragment是依附於Activity而存在的,當Activity在onCreate時,Fragment會進行onAttach, onCreate, onCreateView, onActivityCreat

Android 從程式啟動startActivity到生命週期變化的過程

在上篇文章中,我們瞭解了Android應用程式是如何啟動的,也介紹了具體的流程呼叫。知道了整個APP的啟動過程都是由ActivityThread類中執行的,而且啟動中的生命週期的變化都是通過Handler訊息機制來完成的。那麼這篇將要具體介紹從啟動到startA

設定透明主題引起動畫失效以及開啟其他應用閃現桌面圖示的問題

近日在適配魅族手機的時候,發現設定Activity的主題的 <item name="android:windowIsTranslucent">true</item>透明狀態,或者 <item name="android:windowShowW

Activity和Fragment的生命週期執行順序

總結一下Activity和Fragment的生命週期:  1.Activity和Fragment啟動時候的生命週期  1.Activity super.onCreate執行完畢.- Fragment

IOS 初級開發入門教程(三)探究應用及檢視的生命週期變化

導讀 作業系統都會根據應用的生命週期狀態來管理和處理邏輯,這一點在Android開發上現的就已經非常好了,耳熟能詳的就是應用狀態影響記憶體回收級別和活動的生命週期。同樣,在IOS上也會充分利用應用的檢視的生命週期來進行管理應用。首先,我們先知道IOS應用在程式中的五種狀