• 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模式:解决共享问题,该模式下会有一个单独的栈来管理需要共享的栈,不管哪个程序来访问这个活动,都共用同一个返回栈。
  • 相关阅读:
    原生js实现基本选择器
    javascript数组
    web中关于隐藏与显示
    CSS3 box-shadow(阴影使用)
    java中文件的I/O操作
    组件RecyclerView的应用(一)
    Android客户端与Eclipse服务器端的Socket通信
    C语言关于利用sscanf实现字符串相加减
    TabLayout和ViewPager简单实现页卡的滑动
    DrawerLayout的openDrawer()和closeDrawer()方法
  • 原文地址:https://www.cnblogs.com/1314bjwg/p/13886284.html
Copyright © 2020-2023  润新知