目录

 

​一:Activity是什么?​

​二:如何创建一个Activity​

​三:Activity和Layout以及view之间的关联​

​四:Activity之间的跳转​

​五:Activity启动模式​

​ 六:Activity声明周期​

​七:Activity之间的数据传输​


一:Activity是什么?

 

Activity是一个应用程序​​组件​​,提供一个屏幕,用户可以用来交互为了完成某项任务。

Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件

在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。

 

二:如何创建一个Activity

 

第一步: 创建一个类继承AppCompatActivity

public class MainActivity extends AppCompatActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
}

第二步: 在Andmainifest中申明这个类

<activity android:name=".MainActivity" android:label="appname">


</activity>

第三步: 如果这个类是主入口需要申明intent-filter

<activity android:name=".MainActivity" android:label="123">

<intent-filter>
<action android:name="android.intent.action.MAIN" />

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

三:Activity和Layout以及view之间的关联

public class MainActivity extends AppCompatActivity{//实现了点击事件接口

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//activity与layout进行关联
setContentView(R.layout.activity_login);
//通过findViewById将layout中的控件找出来转成view
final TextView textView = findViewById(.titleTextview);
//拿到button这个view
Button button = findViewById(.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//为textview设置文本
textView.setText(getString(R.string.app_name));
}
});
}
}

四:Activity之间的跳转

public void loginClick(View view){
//通过Intent意图对象,传递参数从当前activity跳转到目标activity
Intent intent = new Intent(this,IndexActivity.class);
//逻辑处理
startActivity(intent);
}

五:Activity启动模式

四种启动模式

standard:系统默认的启动模式,栈结构,打开一个activity入栈,再打开下个activity,接着入栈,先进后出的特点,我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例。

Android四大组件之Activity组件_ide

singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;

Android四大组件之Activity组件_bundle_02

singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;

Android四大组件之Activity组件_ide_03

singleInstance:如果我们将某个activity设置成这个singleStance启动模式,则当激活这个activity之后单独放到一个栈,下次再使用的时候,直接使用这个栈,比如打电话应用就是一个singleStance模式启动的activity

代码实现有两种方式

第一种在mainifest.xml中配置,想要的启动模式

<activity android:name=".IndexActivity" android:launchMode="singleInstance"/>

第二种在java代码中设置

Intent intent = new Intent(this,IndexActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
//逻辑处理
startActivity(intent);

 六:Activity声明周期

onCreate():当我们点击activity的时候,系统会调用activity的oncreate()方法,在这个方法中我们会初始化当前布局setContentLayout()方法。

onStart():onCreate()方法完成后,此时activity进入onStart()方法,当前activity是用户可见状态,但没有焦点,与用户不能交互,一般可在当前方法做一些动画的初始化操作。

onResume():onStart()方法完成之后,此时activity进入onResume()方法中,当前activity状态属于运行状态 (Running),可与用户进行交互。

onPause():当另外一个activity覆盖当前的acitivty时,此时当前activity会进入到onPause()方法中,当前activity是可见的,但不能与用户交互状态。

onStop():onPause()方法完成之后,此时activity进入onStop()方法,此时activity对用户是不可见的,在系统内存紧张的情况下,有可能会被系统进行回收。所以一般在当前方法可做资源回收。

onDestroy():onStop()方法完成之后,此时activity进入到onDestory()方法中,结束当前activity。

onRestart():onRestart()方法在用户按下home()之后,再次进入到当前activity的时候调用。调用顺序onPouse()->onStop()->onRestart()->onStart()->onResume().

Android四大组件之Activity组件_bundle_04

 

七:Activity之间的数据传输

当我们在一个Activity打开另一个Activity的时候,如何把当前这个Activity的一些数据带到即将打开的Activiry,再次关闭打开的Activity时候,如何把数据带到当前这个Activity?

Activity之间是通过Intent进行通信的。intent.putExtra()这个方法参数有多种可以满足数据传输需求

如下代码是第一个Activity

public class MainActivity extends AppCompatActivity{//实现了点击事件接口

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
public void loginClick(View view){
Intent intent = new Intent(this,IndexActivity.class);
//第一种方法是传输基本类型数据
intent.putExtra("name","www.javayihao.top");
//第二种方法是传输一个bundle,bundle类似一个map,可以防止key-value类型数据
Bundle bundle = new Bundle();
bundle.putString("name","www.javayihao.top");
intent.putExtra("bundle",bundle);
//第三种方法传输一个序列化,这里User是implements Serializable之后才能传递
intent.putExtra("name",new User());
startActivity(intent);
}
}

第二个activity

public class IndexActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(getIntent()!=null) {
//第一种接收方法
String name= getIntent().getStringExtra("title");
//第二种接收方法
String name1 = getIntent().getBundleExtra("bundle").getString("name");
}
}
}

如何让第一个activity接收第二个activity关闭之后传递的数据

第一步,在第一个activity加入以下代码

Intent intent = new Intent(this,IndexActivity.class);
startActivityForResult(intent,100);

第二步,在第二个activity设置

public void loginClick(View view){
Intent intent = new Intent();
intent.putExtra("name","www.javayihao.top");
setResult(RESULT_OK,intent);
// setResult(RESULT_OK);
finish();
}

第三步,在第一个activity中的onActivityResult添加方法

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==100&&resultCode==RESULT_OK){
//其他业务
}
}