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


相关文章
|
1月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
2月前
|
存储 Android开发 开发者
深入理解安卓应用开发的核心组件
【10月更文挑战第8天】探索Android应用开发的精髓,本文带你了解安卓核心组件的奥秘,包括Activity、Service、BroadcastReceiver和ContentProvider。我们将通过代码示例,揭示这些组件如何协同工作,构建出功能强大且响应迅速的应用程序。无论你是初学者还是资深开发者,这篇文章都将为你提供新的视角和深度知识。
|
2月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
94 0
|
13天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
94 6
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
28 3
|
2月前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
24 3
|
2月前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。
|
2月前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
51 6
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
20 0