Android四大组件之Activity组件

简介: Android四大组件之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(R.id.titleTextview);
        //拿到button这个view
        Button button = findViewById(R.id.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则会在任务栈中销毁该实例。

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

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

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().

 

七: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){
        //其他业务
    }
}


相关文章
|
10天前
|
存储 设计模式 数据库
构建高效的安卓应用:探究Android Jetpack架构组件
【4月更文挑战第20天】 在移动开发的世界中,构建一个既高效又可维护的安卓应用是每个开发者追求的目标。随着Android Jetpack的推出,Google为开发者提供了一套高质量的库、工具和指南,以简化应用程序开发流程。本文将深入探讨Jetpack的核心组件之一——架构组件,并展示如何将其应用于实际项目中,以提升应用的响应性和稳定性。我们将通过分析这些组件的设计原则,以及它们如何协同工作,来揭示它们对于构建现代化安卓应用的重要性。
|
27天前
|
Android开发
Android四大组件详解2
Android四大组件详解
25 1
|
27天前
|
存储 监控 数据可视化
Android四大组件详解1
Android四大组件详解
40 0
|
2月前
|
设计模式 Android开发
[Android 四大组件] --- BroadcastReceiver
[Android 四大组件] --- BroadcastReceiver
33 0
|
9天前
|
设计模式 前端开发 数据库
构建高效Android应用:使用Jetpack架构组件实现MVVM模式
【4月更文挑战第21天】 在移动开发领域,构建一个既健壮又易于维护的Android应用是每个开发者的目标。随着项目复杂度的增加,传统的MVP或MVC架构往往难以应对快速变化的市场需求和复杂的业务逻辑。本文将探讨如何利用Android Jetpack中的架构组件来实施MVVM(Model-View-ViewModel)设计模式,旨在提供一个更加模块化、可测试且易于管理的代码结构。通过具体案例分析,我们将展示如何使用LiveData, ViewModel, 和Repository来实现界面与业务逻辑的分离,以及如何利用Room数据库进行持久化存储。最终,你将获得一个响应迅速、可扩展且符合现代软件工
14 0
|
13天前
|
Android开发 开发者
什么是Android Jetpack,它包括哪些组件?
【4月更文挑战第17天】Android Jetpack是Google提供的一套工具集,助力开发者高效、稳定地开发Android应用。它包含架构、UI、行为和基础组件,简化了后台任务、导航和生命周期管理,使开发者能专注于创新。随着不断更新,如CameraX的推出,掌握Jetpack对开发者面试和工作至关重要。
19 0
|
16天前
|
存储 数据库 Android开发
使用Android Jetpack组件加速开发流程
【4月更文挑战第14天】Android Jetpack是为提升开发速度和代码质量而生的组件集合,包括`ViewModel`、`LiveData`、`RecyclerView`、`Room`、`WorkManager`等,它们遵循最新设计原则和最佳实践。例如,`RecyclerView`优化列表显示,`Room`简化数据库操作,`WorkManager`处理后台任务,`ViewModel`和`LiveData`分离业务和UI逻辑。此外,`Navigation`和`Paging`分别优化用户导航和数据加载。通过这些组件,开发者能更高效地构建高性能应用,值得学习和使用。
|
18天前
|
存储 数据库 Android开发
构建高效安卓应用:采用Jetpack架构组件优化用户体验
【4月更文挑战第12天】 在当今快速发展的数字时代,Android 应用程序的流畅性与响应速度对用户满意度至关重要。为提高应用性能并降低维护成本,开发者需寻求先进的技术解决方案。本文将探讨如何利用 Android Jetpack 中的架构组件 — 如 LiveData、ViewModel 和 Room — 来构建高质量的安卓应用。通过具体实施案例分析,我们将展示这些组件如何协同工作以实现数据持久化、界面与逻辑分离,以及确保数据的即时更新,从而优化用户体验并提升应用的可维护性和可测试性。
|
22天前
|
存储 SQL 数据库
构建高效Android应用:采用Jetpack架构组件的实践之路
【4月更文挑战第7天】 在快速迭代的移动开发领域,构建一个既健壮又易于维护的Android应用至关重要。本文将深入探讨如何利用Google推出的Jetpack架构组件,实现Android应用的模块化和组件化,从而提升开发效率和应用性能。我们将通过具体实例分析生命周期管理、UI控制器、数据存储等核心组件,展示其在真实应用中的运用,以及如何借助这些组件简化日常开发任务,确保代码的可扩展性和可测试性。
|
2月前
|
数据可视化 Android开发
[Android 四大组件] --- Service
[Android 四大组件] --- Service
24 0