1.什么是Activity
Android提供的四大组件之一。它是一个界面的载体(内含各种控件),不妨理解为web开发中的html文件(含各种标签)。当然,Activity远远没有这么简单,不妨看一下源代码。作为一个继承的类,它的源码达到了7000行,这是由于Activity封装了很多方法给开发者使用。当然,初学者不需要知道这些底层的东西。
2.Activity的生命周期
这是官方参考文档里的图。
不难看出,当这个activity第一次创建出现时是oncreate方法调用了,直到这个Activity被销毁。当然,我们一般大量的刷新类型的业务处理是放在onresume这个方法实现。(因为create只会在activity创建时调用一次,除非销毁才会再次调用,这是开销比较大的,一般不这么做)
下面代码尝试调用所有的方法,明确生命周期。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码测试:
package com.zc.helloworld;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btn;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("info","MainActivity onCreate()");
}
@Override
protected void onStart() {
super.onStart();
Log.e("info","MainActivity onStart()");
}
@Override
protected void onResume() {
super.onResume();
Log.e("info","MainActivity onResume()");
}
@Override
protected void onPause() {
super.onPause();
Log.e("info", "MainActivity onPause()");
}
@Override
protected void onStop() {
super.onStop();
Log.e("info", "MainActivity onStop()");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("info","MainActivity onDestroy()");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e("info","MainActivity onRestart()");
}
}
演示结果:
当初次打开App时,出现如下。
当home键最小化App时,出现如下。
当回到未被后台销毁的APP时,出现如下。
当退出且关闭App时,出现如下。
从什么的情况,不难看出生命周期的运转过程。
3.常用的Activity
在开发中,不可避免要写很多的Activity,但是为了方便,谷歌已经封装了很多实用的牵涉底层的Activity。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码测试:
package com.zc.helloworld;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btn1,btn2,btn3,btn4;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
btn4 = (Button) findViewById(R.id.btn4);
context = this;
btn1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}});
btn2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivity(intent);
}});
btn3.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"Hello World!");
startActivity(intent);
}});
btn4.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}});
}
}
演示结果:
4.Activity之间的数据交互
一般用intent传递。(内存数据)
代码测试:
MainActivity.java(将这个Activity的textview数据传到下一个Activity)
package com.zc.helloworld;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button btn1;
private TextView tv;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
btn1 = (Button) findViewById(R.id.btn1);
tv = (TextView) findViewById(R.id.tv1);
btn1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(context,Main2Activity.class);
String data = (String) tv.getText();
intent.putExtra("data",data);
startActivity(intent);
}});
}
}
MainActivity2.java
package com.zc.helloworld;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class Main2Activity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
tv = (TextView) findViewById(R.id.tv2);
Intent intent = getIntent();
if(intent!=null){
String data = intent.getStringExtra("data");
tv.setText(data);
}
}
}
演示结果:
当然,更多类型,更加复杂的数据可以用Bundle绑定一起传递。
5.最后提一下
实际开发中必须要处理好Activity和context。