热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Dialog式的Activity(AndroidActivity生命周期)

概述和普通的Activity跳转稍微不同的是,当第1个Activity跳转到第二个Activity后,如果点击'back'按钮(即Android键盘的按钮,则不会调

概述

  和普通的Activity跳转稍微不同的是,当第1个Activity跳转到第二个Activity后,如果点击‘back‘按钮(即Android键盘的,按钮,则不会调用调用第一个Activity的onStop方法,因为弹出对话框的时候,第1个Activity对用户仍然是Visible(可见的).

  如下,定义了两个继承Activity的java类:

,,
 1 package com.example.activitydialog;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.Menu;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 
11 public class MainActivity extends Activity {
12 
13     private Button btn = null;
14     
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17 System.out.println("MainActivity onCreate");
18         // TODO Auto-generated method stub
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21         
22         btn = (Button)findViewById(R.id.btnMain);
23         //pop a dialog activity.
24         btn.setOnClickListener(new OnClickListener() {
25             
26             @Override
27             public void onClick(View v) {
28                 Intent intent = new Intent(MainActivity.this, DialogActivity.class);
29                 startActivity(intent);
30             }
31         });
32     }
33 
34     @Override
35     protected void onDestroy() {
36 System.out.println("MainActivity onDestroy");        
37         // TODO Auto-generated method stub
38         super.onDestroy();
39     }
40 
41     @Override
42     protected void onPause() {
43         System.out.println("MainActivity onPause");        
44         // TODO Auto-generated method stub
45         super.onPause();
46     }
47 
48     @Override
49     protected void onRestart() {
50         System.out.println("MainActivity onRestart");
51         // TODO Auto-generated method stub
52         super.onRestart();
53     }
54 
55     @Override
56     protected void onResume() {
57         System.out.println("MainActivity onResume");
58         // TODO Auto-generated method stub
59         super.onResume();
60     }
61 
62     @Override
63     protected void onStart() {
64         System.out.println("MainActivity onStart");
65         // TODO Auto-generated method stub
66         super.onStart();
67     }
68 
69     @Override
70     protected void onStop() {
71         System.out.println("MainActivity onStop");
72         // TODO Auto-generated method stub
73         super.onStop();
74     }
75 
76 
77     @Override
78     public boolean onCreateOptionsMenu(Menu menu) {
79         // Inflate the menu; this adds items to the action bar if it is present.
80         getMenuInflater().inflate(R.menu.main, menu);
81         return true;
82     }
83 
84 }
View Code

,,
 1 package com.example.activitydialog;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.widget.Button;
 9 
10 public class DialogActivity extends Activity {
11 
12     private Button btn = null;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         System.out.println("DialogActivity onCreate");
17         // TODO Auto-generated method stub
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_dialog);
20 
21         btn = (Button) findViewById(R.id.btnDialog);
22         //go to the previous activity when click on the button.
23         btn.setOnClickListener(new OnClickListener() {
24 
25             @Override
26             public void onClick(View v) {
27                 Intent intent = new Intent(DialogActivity.this, MainActivity.class);
28                 startActivity(intent);
29             }
30         });
31     }
32 
33     @Override
34     protected void onDestroy() {
35         System.out.println("DialogActivity onDestroy");
36         // TODO Auto-generated method stub
37         super.onDestroy();
38     }
39 
40     @Override
41     protected void onPause() {
42         System.out.println("DialogActivity onPause");
43         // TODO Auto-generated method stub
44         super.onPause();
45     }
46 
47     @Override
48     protected void onRestart() {
49         System.out.println("DialogActivity onRestart");
50         // TODO Auto-generated method stub
51         super.onRestart();
52     }
53 
54     @Override
55     protected void onResume() {
56         System.out.println("DialogActivity onResume");
57         // TODO Auto-generated method stub
58         super.onResume();
59     }
60 
61     @Override
62     protected void onStart() {
63         System.out.println("DialogActivity onStart");
64         // TODO Auto-generated method stub
65         super.onStart();
66     }
67 
68     @Override
69     protected void onStop() {
70         System.out.println("DialogActivity onStop");
71         // TODO Auto-generated method stub
72         super.onStop();
73     }
74 
75 }
View Code

  并在layout中分别定义两个不同的布局xml文件:

(MainActivity对应的布局)

,,
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11     <Button
12         android:id="@+id/btnMain"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:text="@string/second_activity" />
16 
17 RelativeLayout>
View Code

(DialogActivity对应的布局)

,,
 1 xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" 
 6     >
 7     <Button 
 8         android:id="@+id/btnDialog"
 9         android:layout_width="fill_parent"
10         android:layout_height="fill_parent"
11         android:text="@string/second_activity"
12         />
13 LinearLayout>
View Code

  当然,如果使用第二个Activity的按钮返回(而不是通过键盘的‘返回,‘的话,还是会调用第一个Activity的onStop方法).

  这也充分说明了,官网对‘Activity生命周期的这3段话):

There are three key loops you may be interested in monitoring within your activity:  

  • The entire lifetime of an activity happens between the first call to onCreate(Bundle) through to a single final call to onDestroy(). An activity will do all setup of "global" state in onCreate(), and release all remaining resources in onDestroy(). For example, if it has a thread running in the background to download data from the network, it may create that thread in onCreate() and then stop the thread in onDestroy().
  • The visible lifetime of an activity happens between a call to onStart() until a corresponding call to onStop(). During this time the user can see the activity on-screen, though it may not be in the foreground and interacting with the user. Between these two methods you can maintain resources that are needed to show the activity to the user. For example, you can register a BroadcastReceiver in onStart() to monitor for changes that impact your UI, and unregister it in onStop() when the user no longer sees what you are displaying. The onStart() and onStop() methods can be called multiple times, as the activity becomes visible and hidden to the user.
  • The foreground lifetime of an activity happens between a call to onResume() until a corresponding call to onPause(). During this time the activity is in front of all other activities and interacting with the user. An activity can frequently go between the resumed and paused states -- for example when the device goes to sleep, when an activity result is delivered, when a new intent is delivered -- so the code in these methods should be fairly lightweight.

Dialog式的Activity(AndroidActivity生命周期)


推荐阅读
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Manacher算法详解:寻找最长回文子串
    本文将详细介绍Manacher算法,该算法用于高效地找到字符串中的最长回文子串。通过在字符间插入特殊符号,Manacher算法能够同时处理奇数和偶数长度的回文子串问题。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • MySQL 数据库连接方法
    本文介绍了如何使用 MySQL 命令行工具连接到指定的数据库。 ... [详细]
  • Excel 数据分析基础
    Excel 是数据分析中最基本且强大的工具之一,具备多种实用功能和操作方法。本文将简要介绍 Excel 的不同版本及其兼容性问题,并探讨在处理大数据时的替代方案。 ... [详细]
  • 本文介绍了如何在 ASP.NET 中设置 Excel 单元格格式为文本,获取多个单元格区域并作为表头,以及进行单元格合并、赋值、格式设置等操作。 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
author-avatar
mk艾草_180
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有