目录
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
主要的过程:
- 启动方法
- 设置回传数据的方法
- 接受回传数据的方法
Run 中重要的结果
D/Main: click:1
D/second: onCreate:1D/second: click:2
D/Main: onActivityResult2D/Main: click:3
D/second: onCreate:3D/second: click:4
D/Main: onActivityResult4D/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