Android四大组件有Activity活动,Service服务,Content Provider内容提供,BroadcastReceiver广播接收器。 Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件。这篇博客主要介绍有关Activity的理论、Activity的生命周期,并通过一个小demo来深入对Activity的理解。
Activity相关API
Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。其主要的API有:
startActivity(Intent intent):一般启动Activity
startActivityForResult(Intent intent, int requestCode):带回调启动Activity
onActivityResult(int requestCode, int resultCode, @Nullable Intent data):回调方法
finish():结束当前Activity
getIntent():得到启动Activity的意图
Intent概念
Intent是Activity、Service和BroadcastReceiver三个应用组件之间通信的信使,当在一个Activity中启动另一个Activity时会用到Intent。Intent可以携带数据在应用组建中传播。下面的代码是将message从MainActivity传递给Main2Activity。
Intent intent=new Intent(this,Main2Activity.class);
String message=main_message.getText().toString();
Intent intent1 = intent.putExtra("MESSAGE", message);
startActivity(intent1);
Activity生命周期
Activity生命周期的相关方法有onCreate()、onStart()、onResume()、onPause()、onRestart()、onStop()、onDestory()。
@Override
protected void onStart() {
Log.e("MES","This is a warning message");
super.onStart();
}
View视图
注意setOnClickListener(onClickListener listener)方法,主要用于设置点击监听。
Button1= (Button) findViewById(R.id.button1);
//设置监听
Button1.setOnClickListener(this);
DEMO
下面是一个demo,主要通过Intent进行Activity之间的消息互传。
MainActivity.java:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText main_message;
private Button Button1;
private Button Button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//加载布局,并生成一系列的视图对象
setContentView(R.layout.activity_main);//button设置点击监听:回调函数实现监听相应的功能
//初始化视图对象
main_message= (EditText) findViewById(R.id.main_message);
Button1= (Button) findViewById(R.id.button1);
Button2= (Button) findViewById(R.id.button2);
//设置监听
Button1.setOnClickListener(this);//设置两个Button的事件监听
Button2.setOnClickListener(this);
}
@Override
public void onClick(View v) {//v是发生事件的视图对象
if(v==Button1)
{
Toast.makeText(this,"Function 1",0).show();//用Toast检查监听
Intent intent=new Intent(this,Main2Activity.class);
String message=main_message.getText().toString();
Intent intent1 = intent.putExtra("MESSAGE", message);
startActivity(intent1);
}
else if(v==Button2){
Toast.makeText(this,"Function 2",0).show();
Intent intent=new Intent(this,Main2Activity.class);
String message=main_message.getText().toString();
Intent intent2 = intent.putExtra("MESSAGE", message);
int requestCode=2;
startActivityForResult(intent2,requestCode);
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if(requestCode==2&&resultCode==3)
{
String result=intent.getStringExtra("RESULT");
main_message.setText(result);
}
}
public void back1(View view) {
}
public void back2(View view) {
}
}
Main2Activity.java:
public class Main2Activity extends AppCompatActivity {
private EditText main2_message;
@SuppressLint("WrongViewCast")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
main2_message=findViewById(R.id.main2_message);
Intent intent2=getIntent();
String message=intent2.getStringExtra("MESSAGE");
main2_message.setText(message);
}
public void back1(View v){
finish();
}//back1直接finish
public void back2(View v)
{//back2在finish前会把结果传回来
int resultCode=3;
Intent data=new Intent();
String result=main2_message.getText().toString();
data.putExtra("RESULT",result);
setResult(resultCode,data);
finish();
}
}
Tips:1)对于可编辑文本,要选择EditText而不能选择TextView;2)可通过android:onClick实现onClickListener,在MainActivity中写back1方法即可。activity_main.xml代码如下:
<Button
android:id="@+id/new_button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BACK1"
android:onClick="back1" />
最终运行结果: