Android:week 9总结 Activity生命周期

目录

Monday:Activity生命周期

Tuesday


 

 

Monday:Activity生命周期

 

1.

package com.example.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {  //此方法必须实现
        super.onCreate(savedInstanceState);        //调用父类的方法   savedInstanceState:保存Activity上一次运行的信息 (除了Destroy)
        setContentView(R.layout.activity_main);
        Log.d("MainActivity", "onCreate()");
    }
    protected void onStart() {
        super.onStart();
        Log.d("MainActivity", "onStart()");
    }
    protected void onResume() {        //确定哪一个Activity被使用
        super.onResume();
        Log.d("MainActivity", "onResume()");
    }
    protected void onPause() {
        super.onPause();
        Log.d("MainActivity", "onPause()");
    }
    protected void onStop() {
        super.onStop();
        Log.d("MainActivity", "onStop()");
    }
    protected void onDestroy() {
        super.onDestroy();
        Log.d("MainActivity", "onDestroy()");
    }
}

(1)启动虚拟器时,通过Run可以看到,程序使用了以下方法:

D/MainActivity: onCreate()       //创建
D/MainActivity: onStart()          //启动
D/MainActivity: onResume()    //获取焦点

(2)使用屏幕下方中间的按键时,使用以下方法:

D/MainActivity: onPause()      //暂停
D/MainActivity: onStop()        //停止

(3)使用屏幕下方的左键关闭时,使用以下方法:

D/MainActivity: onPause()      //暂停

D/MainActivity: onStop()       //停止
D/MainActivity: onDestroy()  //销毁

(4)屏幕旋转,使用以下方法:

D/MainActivity: onPause()
D/MainActivity: onStop()
D/MainActivity: onDestroy()
D/MainActivity: onCreate()
D/MainActivity: onStart()
D/MainActivity: onResume() 

 

2.

 public void click(View view){
        count++;
        Log.d("MainActivity", "click: "+count);
    }

当横屏时会发现count的数据清零,无法保存。

D/MainActivity: click: 2
D/MainActivity: click: 3

D/MainActivity: onPause()
D/EGL_emulation: eglMakeCurrent: 0xa44840c0: ver 2 0 (tinfo 0xa4483140)
D/MainActivity: onStop()
D/MainActivity: onDestroy()
D/MainActivity: onCreate()
D/MainActivity: onStart()
D/MainActivity: onResume()
D/EGL_emulation: eglMakeCurrent: 0xa44840c0: ver 2 0 (tinfo 0xa4483140)
I/zygote: Do partial code cache collection, code=20KB, data=30KB
I/zygote: After code cache collection, code=20KB, data=30KB
    Increasing code cache capacity to 128KB
D/MainActivity: click: 1

若要保存需要定义一个键和键值(相当于Map)

package com.example.activity;

import androidx.appcompat.app.AppCompatActivity;
import android.widget.*;
import android.view.*;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private int count=0;
    protected static final String MESSAGE="键的名称";
    @Override
    protected void onCreate(Bundle savedInstanceState) {  //此方法必须实现
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if(savedInstanceState!=null){
            count=savedInstanceState.getInt(MESSAGE);
        }
        Log.d("MainActivity", "onCreate()"+count);
    }
    public void click(View view){
        count++;
        Log.d("MainActivity", "click: "+count);
    }
    @Override
    protected void onSaveInstanceState(Bundle savedInstanceState) {  //当系统销毁Activity时会调用,在onPause之后调用
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putInt(MESSAGE,count);
        Log.d("MainActivity", "onSavedInstanceState: "+count);
    }

    protected void onStart() {
        super.onStart();
        Log.d("MainActivity", "onStart()");
    }
    protected void onResume() {
        super.onResume();
        Log.d("MainActivity", "onResume()");
    }
    protected void onPause() {
        super.onPause();
        Log.d("MainActivity", "onPause()");
    }
    protected void onStop() {
        super.onStop();
        Log.d("MainActivity", "onStop()");
    }
    protected void onDestroy() {
        super.onDestroy();
        Log.d("MainActivity", "onDestroy()");
    }
}

 

 

Tuesday

主要的过程:

  1. 启动方法
  2. 设置回传数据的方法
  3. 接受回传数据的方法

Run 中重要的结果

D/Main: click:1
D/second: onCreate:1

D/second: click:2
D/Main: onActivityResult2

D/Main: click:3
D/second: onCreate:3

D/second: click:4
D/Main: onActivityResult4

D/Main: click:5
D/second: onCreate:5
 

 

代码实现:

1.新建SecondActivity (java->new->JavaClass)

2.新建second_activity  (res->layout->new->Layout Resource file)

3.引用新创建的Activity  (app->manifests->AndroidManifest)

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity">

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="@id/tv"
        app:layout_constraintTop_toBottomOf="@id/tv"
        android:onClick="click"
        android:text="OK!"
        android:textSize="20sp">
    </Button>
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {
    //键值对
    private int count =0;//点击次数的信息
    public static final String COUNT="com.example.myapplication.count";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void click(View view){
        count++;
        Intent intent = new Intent(this,SecondActivity.class);
        //启动方只能发送信息 但是不可以接受回传信息
        // startActivity(intent);
        intent.putExtra(COUNT,count);  //把COUNT的信息传递给Second
        //可以接受回传信息   需要一个请求码
        startActivityForResult(intent,1);
        Log.d("Main","click:"+count);
    }

    protected void onActivityResult(int requestcode,int resultCode,Intent intent){
        super.onActivityResult(requestcode,resultCode,intent);
        if(requestcode==1&&resultCode==1){
            count=intent.getIntExtra(COUNT,0);
            Log.d("Main","onActivityResult"+count);
        }
    }
}

second_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello Second!" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="OK!"
        android:textSize="20sp">
    </Button>
</LinearLayout>

SecondActivity.java 

package com.example.myapplication;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;

public class SecondActivity extends AppCompatActivity {
    private int count2 =0;//点击次数的信息

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);
        //获取值
        Intent intent = getIntent();
        if(intent!=null) {
            count2=intent.getIntExtra(MainActivity.COUNT,0);
        }
        Log.d("second","onCreate:"+count2);  //没获取输出0  否则输出count
    }
    //运行结束时 回传数据
    public void click(View view){
        count2++;
        Intent intent = new Intent();
        //设置回传信息
        intent.putExtra(MainActivity.COUNT,count2);
        setResult(1,intent);
        Log.d("second","click:"+count2);
        finish(); //结束时才会接受回传信息
    }
}

AndroidManifest.xml

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:label="MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".SecondActivity"
            android:label="SecondActivity">
        </activity>
    </application>

</manifest>

 


 Activity的四种launchMode 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值