Activity 的使用

一:Activity的生命周期:

(1):你需要来理解栈是怎样工作的,即该数据结构的特点。Android中的活动是可以层叠的,我们每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键会销毁最上面的活动,下面的活动就会重新显示出来,其实这就是一个栈,即销毁一个活动就是出栈,也就是处在栈顶的活动出来。然后栈顶位置又被一个活动占用。

1:活动的生命周期对应的函数:Activity类中定义了7个回调函数,覆盖了活动生命周期的每一个环节。
  
onCreate():在活动第一次被创建的时候调用。

  
onStart():这个方法在活动由不可见变为可见的时候调用。

  
onResume():这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。
  
onPause():这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存
  一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。
  
onStop():这个方法在活动完全不可见的时候调用,他和onPause()方法的主要区别在于,如果启动的新活动是一个对话框的活动,那么onPause
()方法会执行,而onStop()方法并不会执行。
  
onDestroy():这个方法在活动销毁之前调用,之后活动的状态将变为销毁状态。


onRestart()这个方法在活动由停止状态变为运行状态之前调用。也就是活动被重新启动的。

(2):用于测试的代码:

//MainAcitvity中创建两个按钮,实现启动另外两个活动。
package
com.example.test; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG,"the main"); Button startDialog = (Button) findViewById(R.id.start_normal); Button startnomal = (Button) findViewById(R.id.start_Dialog); startDialog.setOnClickListener(v -> { Intent intent = new Intent(MainActivity.this,normal.class); startActivity(intent); }); startDialog.setOnClickListener(v -> { Intent intent1 = new Intent(MainActivity.this,DialogActivity.class); startActivity(intent1); }); } @Override protected void onStart() { super.onStart(); int i = 0; Log.d(TAG,"onStart"+i++); } @Override protected void onResume() { super.onResume(); int i = 0; Log.d(TAG,"onResume"+i++); } @Override protected void onPause() { super.onPause(); int i = 0; Log.d(TAG,"onPause"+i++); } @Override protected void onDestroy() { super.onDestroy(); int i = 0; Log.d(TAG,"onDestroy"+i++); } @Override protected void onRestart() { super.onRestart(); int i = 0; Log.d(TAG,"onReStart"+i++); } @Override protected void onStop() { super.onStop(); int i = 0; Log.d(TAG,"onStop"+i++); } }

//在活动创建的时候:先执行onCreate(),onStart(),onResume().

//在点击startNormal时会执行onPause()和onStop()。在点击back返回主界面的时候会依次执行onRestart(),onStart(),onResume()

//在点击startDialog时会依次执行:
onPause()和onStop()
//在退出的时候且应用还在后台运行的情况下会执行

D/MainActivity: onPause0
D/MainActivity: onStop0

//然后又点开

D/MainActivity: onReStart0
D/MainActivity: onStart0
onResume0

normal.java

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class normal extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_normal);
    }
}

Dialog.java

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class DialogActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
    }
}

//这个生命周期要灵活运用只有实践。

(三):活动的启动模式:启动模式一共有四种,分别是 standard,singleTop,singleTask,和singleInstance,可以在AndroidMainfest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式:

1:standard模式:即不会管栈中有几个同一个活动只要你创建他就入栈,那么在你退出的时候也要back多下。

2:singleTop:当某一个活动已经存在栈顶时,在创建该同活动时就不会进行创建,而是使用当前活动。
3 singleTask:使用singleTop模式可以很好的解决重复创建栈顶活动的问题,但是当同一个活动被创建时,且栈顶不存在时,singleTop模式还会创建同一个活动的多个。而singleTask:会进行检查。
4 singleInstance模式:解决共享问题,该模式下会有一个单独的栈来管理需要共享的栈,不管哪个程序来访问这个活动,都共用同一个返回栈。
原文地址:https://www.cnblogs.com/1314bjwg/p/13886284.html