云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

Android高手进阶之Activity全面解析-手机里看到所有界面揭秘

jxf315 2025-03-19 13:43:15 教程文章 42 ℃

大白话一个Activity里会有一个页面,用户让用户来操作,完成如打电话、发短信、拍照等功能。

Activity是什么?

Activity是一个Android应用程序组件(也称为Android四大组件之一),它提供了一个屏幕,用户可以通过该屏幕进行交互以执行某些操作,例如拨打电话,拍照,发送电子邮件或查看地图。每个活动都有一个窗口,用于绘制其用户界面。窗口通常填满屏幕,但可能比屏幕小,并漂浮在其他窗口的顶部.

Android应用程序通常由多个彼此松散绑定的Activity组成。通常,应用程序中的一个Activity被指定为“主要”Activity,该Activity在首次启动应用程序时呈现给用户。然后,每个Activity可以启动另一个Activity以执行不同的操作。每次新Activity开始时,前一个Activity都会停止,但系统会将Activity保留在后台堆栈中(“后堆栈”)。当一个新的Activity开始时,它会被推到后面的堆栈上,并引起用户的注意。后栈遵循基本的“ 后进先出”堆栈机制,因此,当用户完成当前活动并按下"后退按钮"时,它从堆栈弹出(并销毁),之前的活动恢复。

如何创建Activity

要创建Activity,您必须创建Activity(或其现有子类)的子类。在子类中,您需要实现当Activity在其生命周期的各个状态之间转换时系统调用的回调方法,例如在创建,停止,恢复或销毁活动时。两个最重要的回调方法是:

public class ExampleActivity extends AppCompatActivity {

 @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
//您必须实现此方法。系统在创建Activity时调用此方法。在您的实施中,您应该初始化Activity的基本组成部分。最重要的是,您必须在此处调用以定义Activity用户界面的布局。
        setContentView();
    }


//系统将此方法称为用户离开您的Activity的第一个指示(尽管并不总是意味着Activity正在被销毁)。这通常是您应该提交应该在当前用户会话之外保留的任何更改的地方(因为用户可能不会回来)。

@Override
    protected void onPause() {
        super.onPause();
        //在此处应该提交应该在当前用户会话之外保留的任何更改的地方
    }

}

在访问Activity时,必须在manifest中声明此Activity,


  
       ..
.    .
.. 

你也可以指定Activity的过滤器,如下:


   

 
 

如何启动Activity

您可以通过调用启动另一个Activity,通过startActivity()方法,并将Intent传递给您要启动的Activity。intent指定要启动的确切Activity或描述您要执行的操作类型(系统为您选择适当的活动,甚至可以来自不同的应用程序)。Intent(意图)还可以携带少量数据以供启动的活动使用。


启动指定自建的Activity

Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

此种启动又叫做显示Intent

启动其他类型的Activity

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);

此种启动又叫做隐式Intent .

有时候,我们可能需要从上一个Activity接收返回数据结果,这时,我们就需要另外一种启动方式了.

在这种情况下,通过调用startActivityForResult()(而不是startActivity())来启动Activity。然后,要从后续Activity接收结果,就需要实现onActivityResult()回调方法。完成后续Activity后,它会在您的onActivityResult() 方法中返回结果。

private void pickContact() {
    // Create an intent to "pick" a contact, as defined by the content provider URI
    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
        // Perform a query to the contact's content provider for the contact's name
        Cursor cursor = getContentResolver().query(data.getData(),
        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
        if (cursor.moveToFirst()) { // True if the cursor is not empty
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex);
            // Do something with the selected contact's name...
        }
    }
}

关闭Activity

您可以通过调用其finish()方法来关闭活动。您还可以关闭之前通过调用启动的单独活动finishActivity()。


接下来便是整个Activity最核心的地方了,只要搞清楚一下内容,Activity也就理解的差不多了

Activity生命周期详解

Activity之所以能够成为Android四大组件之一,原因便是其具有非常灵活的生命周期回调方法,通过实现回调方法来管理Activity的生命周期对于开发强大而灵活的应用程序至关重要。Activity的生命周期直接受其与其他Activity,其任务和后台堆栈的关联的影响。


Activity基本上存在于三种状态:


1.恢复 onResume()
Activity位于屏幕的前景并具有用户焦点。

2.已暂停 onPause()
另一项Activity是在前台并具有焦点,但这一项仍然可见。也就是说,另一个Activity在这个Activity的顶部可见,该Activity部分透明或不覆盖整个屏幕。暂停的Activity完全处于活动状态(Activity 对象保留在内存中,它保留所有状态和成员信息,并保持附加到窗口管理器),但可以在极低内存情况下被系统杀死。

3.停止 onStop()
该Activity完全被另一个Activity遮挡(活动现在位于“背景”中)。停止的Activity也仍然存在(Activity 对象保留在内存中,它维护所有状态和成员信息,但不 附加到窗口管理器)。但是,它不再对用户可见,并且当其他地方需要内存时,它可能被系统杀死。
如果Activity暂停或停止,系统可以通过要求它完成(调用其finish()方法)或简单地终止其进程来从内存中删除它。当活动再次打开时(在完成或杀死之后),必须全部创建它。

Activity完整生命周期回调方法

public class ExampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // The activity is being created.
    }
    @Override
    protected void onStart() {
        super.onStart();
        // The activity is about to become visible.
    }
    @Override
    protected void onResume() {
        super.onResume();
        // The activity has become visible (it is now "resumed").
    }
    @Override
    protected void onPause() {
        super.onPause();
        // Another activity is taking focus (this activity is about to be "paused").
    }
    @Override
    protected void onStop() {
        super.onStop();
        // The activity is no longer visible (it is now "stopped")
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // The activity is about to be destroyed.
    }
}

注意:在执行任何工作之前,以上这些生命周期方法的实现必须始终调用超类实现,如上面的示例所示。

Activity中存在的三个循环生命周期

  • Activity的整个生命周期
    Activity的整个生命周期发生在呼叫onCreate()和呼叫之间onDestroy()。您的Activity的整个生命周期应该执行“全局”状态的设置(例如定义布局)onCreate(),并释放所有剩余资源onDestroy()。
  • Activity的可见生命周期
    Activity的可见生命周期发生在呼叫onStart()和呼叫之间onStop()。在此期间,用户可以在屏幕上看到Activity并与之交互。例如,onStop()在新Activity开始时调用,并且此Activity不再可见。在这两种方法之间,您可以维护向用户显示Activity所需的资源。例如,你可以注册一个 BroadcastReceiver在onStart()监视会影响您的用户界面的变化,并在注销它onStop()时,用户将不再能够看到你所显示的内容。该系统可能会调用onStart()和onStop()活动的整个生命周期内多次为可见和隐藏用户之间的活动交替。
  • Activity的前景生命周期
    Activity的前景生命周期发生在调用onResume()和调用之间onPause()。在此期间,Activity位于屏幕上的所有其他活动之前,并且具有用户输入焦点。Activity可以频繁地进出前台 - 例如,onPause()当设备进入睡眠状态或出现对话框时调用。因为这种状态可以经常转换,所以这两种方法中的代码应该相当轻量级,以避免使用户等待的缓慢转换。

生命周期


有什么问题可以评论交流

最近发表
标签列表