`
zhengjj_2009
  • 浏览: 153126 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

曾经的笔记——android的学习笔记(Activity传参、四种启动模式、生命周期、屏幕横竖屏切换)

 
阅读更多

1、传参

     public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
   
    public void openActivity(View v){
     //Intent intent = new Intent();
     // method 1>
     //intent.setClassName(this, "com.peter.multiactivity.OtherActivity");//设置要激活的组件
     
     //设置要激活的组件
     // method 2>
     //intent.setClassName("com.peter.multiactivity",
     //    "com.peter.multiactivity.OtherActivity");该方法可以跨应用激活Activity
     
     // method 3>
     //intent.setClass(this, OtherActivity.class);
     
     // method 4>
     //intent.setComponent(new ComponentName(this, OtherActivity.class));
     
     //method 5> 
     Intent intent = new Intent(this, OtherActivity.class);
     Log.i("MainActivity", "new Intent(this, OtherActivity.class)");
     
     intent.putExtra("username", "zhengjj");
     intent.putExtra("amount",25000);
     //startActivity(intent);
     startActivityForResult(intent, 100);
    }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  String result = data.getStringExtra("returnData")+"; requestCode="+requestCode+";resultCode="+resultCode;
  Toast.makeText(getApplicationContext(),result, Toast.LENGTH_LONG).show();
  super.onActivityResult(requestCode, resultCode, data);
 }

--------------------------------------------------------------------------------

public class OtherActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_other);
  TextView textView = (TextView)findViewById(R.id.showText);
  Intent intent = getIntent();
  String username = intent.getStringExtra("username");
  int amount = intent.getIntExtra("amount", 30000);
  textView.setText("username="+username+"; amount="+amount);
 }
 
 public void closeActivity(View v){
  Intent intent = new Intent();
  intent.putExtra("returnData", "{'username':'zhengjj','amount':30000}");
  setResult(20, intent);//设置返回数据
  finish();//关闭Activity(关闭窗口)
 }

================================================

启动模式默认是 android:launchMode="standard"

<activity android:name="com.peter.multiactivity.OtherActivity" android:label="@string/other_app" android:launchMode="singleTop" />

我们在开发项目的过程中,会涉及到该应用中多个Activity组件之间的跳转,或者夹带其它应用的可复用的Activity。例如我们可能希望跳转到原来某个Activity实例,而不是产生大量重复的 Activity。这样就需要我们为 Activity 配置特定的加载模式,而不是使用默认的加载模式。

Activity 有四种加载模式

[1] standard 模式

这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。

[2] singleTop 模式

如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。

[3] singleTask 模式

如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

[4] singleInstance 模式

在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。

设置启动模式的位置在 AndroidManifest.xml 文件中 Activity 元素的 android:launchMode 属性。

 

使用Intent可以激活三种核心组件:活动、服务和广播接收者

意图分为显示意图和隐式意图

显示意图:通过调用setClass()或setComponet()设置组件的意图。给定了调用组件的名称。明确指定了要调用的组件是哪一个组件

  主动关闭Activity,finish(); 而不是等待系统去完成。

隐式Intent:意图对像本身并不知道要传递给哪个组件,至于传递给哪个组件是由Android平台来决定的。==>没有明确指定组件名称的意图,系统会根据所设定的action、category和URI 数据类型找到最合适的组件来处理意图

================================================================

生命周期



1、当Activity在屏幕前台时(位于当前任务堆栈的顶部),它处于激活active或运行状态running,它可以响应用户操作;

 2、当Activity上面有另外一个Activity,上面的Activity没有完全覆盖它,或者上面的Activity是透明的,这时下方的Activity仍然对用户是可见的,下方的Activity就处于暂停状态paused。被暂停的Activity仍然对用户可见,并且是存活的状态(它保留着所有的状态和成员信息,并保持和窗口管理器的连接),如果系统处于内存不足时会杀死这个Activity。

3、当Activity完全被另一个Activity覆盖时则处于停滞状态stopping,它仍然保留所有的状态和成员信息,然而对用户是不可见的,所以当它的窗口被隐藏,如果其他地方需要内存,则系统常常会杀死这个Activity。

 

当Activity从一种状态切换到另一种状态是,会调用以下保护方法来通知这种变化。

onCreate(Buddle saveInstanceState)

onStart()   onRestart()   onResume()  onPause  onStop()   onDestroy()

 

参考的Manifest.xml的代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.itcast.life"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".MainActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".PauseActivity" android:theme="@android:style/Theme.Dialog" />
        <activity android:name=".StopActivity" />
    </application>

</manifest>

------------------------------------------------------------------------------------------

Activity的onSaveInstanceState()和onRestoreInstanceState()的方法

这两个方法并不是生命周期的方法,它们不同于onCreate() onPause等生命周期的方法,它们俩不一定会被触发。当应用遇到意外情况(如内存不足,与直接按下Home键)由系统销毁一个Activity时,onSaveInstanceState()会被调用,另外Activity由运行状态进入暂停状态或停止状态也会调用该方法。但是当用户主动销毁一个Activity是,例如在应用中按了返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。一般来说onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

       另外当屏幕的方向发生了改变,Activity会被销毁并且被重新创建,如果你想在Activity被销毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据,可以重写Activity的onSaveInstanceState()和onRestoreInstanceState()的方法。

public class MainActivity extends Activity {
 private String name;
 @Override
 protected void onRestoreInstanceState(Bundle savedInstanceState) {
  name = savedInstanceState.getString("name");
  //被重新创建后恢复缓存的数据
  super.onRestoreInstanceState(savedInstanceState);
 }

 @Override
 protected void onSaveInstanceState(Bundle outState) {
  outState.putString("name", "zhengjj");
  //被销毁前缓存一些数据
  super.onSaveInstanceState(outState);
 }

==================================================

屏幕横竖屏切换

参考的例子

http://www.cnblogs.com/zhangkai281/archive/2011/07/06/2099277.html 解决Android手机 屏幕横竖屏切换

  • 大小: 64.6 KB
分享到:
评论

相关推荐

    Android 学习笔记——旋转模拟器方向,全屏,窗口生命周期

    总之,这篇文章深入浅出地介绍了Android应用开发中的重要概念,包括屏幕方向切换、全屏显示以及Activity生命周期管理。对于初学者来说,这些都是必须掌握的基础知识。通过实践和深入学习,开发者可以创建出更适应...

    Android Activity学习笔记

    Android Activity学习笔记 Android Activity是Android系统中最基本的组件之一,它负责处理用户交互和显示用户界面。本文将深入讲解Activity的生命周期、Activity之间的数据交互、Activity启动模式、Task和BackStack...

    android 学习笔记7-页面跳转 Activity启动 生命周期 activity数据传递

    1、创建一个自己的Activity 2、启动activity-显示启动和隐式启动: 3、隐式启动自己的activity 4、获取隐启动传递过来的data数据 ...6、禁用掉横竖屏切换 7、开启activity获取返回值-startActivityForResult:

    第一行代码 android学习笔记 完整版

    Android学习笔记是Android开发者的必读书籍,书中涵盖了Android系统架构、Activity、Intent、资源管理等多方面的知识。本笔记对应的学习资源《第一行代码》是Android开发者的入门必读书籍,书中系统地介绍了Android...

    Android学习笔记(十五)——碎片的生命周期

    本篇学习笔记将深入探讨碎片的生命周期,这对于理解如何有效管理Android应用的用户界面至关重要。 碎片的生命周期与Activity的生命周期紧密关联,但它们之间存在着一些差异。首先,让我们来看看一个Fragment的基本...

    Android学习笔记-Activity篇

    在Android开发中,Activity是应用程序的基本构建...理解Activity生命周期及其在Task和Back Stack中的行为,有助于创建高效且用户体验良好的应用。在实际开发中,根据应用需求灵活运用这些概念,将使你的应用更加出色。

    Android开发笔记(3)-Activity生命周期

    总之,掌握Activity生命周期是Android开发的基础,它涉及到应用的响应性、效率和稳定性。开发者需要根据应用的需求灵活运用生命周期方法,确保在不同场景下都能提供优质的用户体验。通过深入学习和实践,我们可以更...

    Android自学笔记-15-Activity的生命周期

    最后,注意Android的Task和Back Stack也是Activity生命周期的重要组成部分。Task是一组按照创建顺序堆叠的Activity,而Back Stack则管理着这些Task的历史记录。用户可以通过返回键按照栈的顺序回退到之前的状态。 ...

    安卓笔记——安卓详细笔记汇总

    - **活动(Activity)管理**:Activity的生命周期,启动模式,以及如何在不同的Activity之间进行跳转。 - **意图(Intent)机制**:Intent用于启动Activity或Service,传递数据,实现不同组件间的通信。 - **服务...

    Android开发笔记——模拟器、应用教程 pdf

    总之,这份"Android开发笔记——模拟器、应用教程"将引导你全面了解Android开发的核心技术和实践方法,无论你是初学者还是经验丰富的开发者,都可以从中受益。通过学习和掌握这些知识点,你将能够创建出高质量、适应...

    Android学习笔记1

    从给定的文件信息来看,这些内容主要是Android开发的学习笔记,涵盖了从基础控件的添加、布局的设置、样式主题的调整到Activity生命周期的管理等多方面的知识点。以下是对文件内容的具体分析: 1. 添加TextView控件...

    Android学习笔记(十四)——在运行时添加碎片

    碎片是Android 3.0(API级别11)引入的一种组件,它可以独立于Activity存在,有自己的生命周期和UI。它们可以在多个屏幕、多面板布局,甚至平板电脑和手机之间共享。碎片的主要目的是提高代码的可复用性和应用程序的...

    Android的activity学习笔记

    【Android的Activity学习笔记】 Activity在Android开发中扮演着至关重要的角色,它是应用程序的基本功能单元,主要用于构建用户界面和处理用户交互。Activity本身并不具备界面元素,而是通过`setContentView(View)`...

    工作流学习笔记——很好很详细

    工作流学习笔记——很好很详细 工作流(Workflow)是一种自动化业务流程的技术,它将复杂的任务分解成一系列可管理的步骤,并按照预定义的规则和条件执行这些步骤。在.NET框架中,Microsoft提供了Windows Workflow ...

    android学习笔记2

    Android学习笔记2中提到的内容涵盖了Android开发的核心知识,包括Android四大组件、Activity生命周期、Service生命周期、广播接收器生命周期以及资源文件的使用。 首先,Android四大组件包括Activity、...

    Android基础学习笔记

    10. **Activity生命周期调整**: 通过在Manifest.xml中指定`android:theme="@android:style/Theme.Dialog"`可以使Activity显示为对话框样式。 11. **布局管理器**: - **LinearLayout**: 线性布局,支持垂直和水平...

    android学习笔记.zip

    - **Activity生命周期**:笔记详细解释了Activity的各个状态(如运行、暂停、停止、销毁)及其转换,这对于优化应用性能和处理用户交互至关重要。 - **Intent机制**:Intent是Android中启动组件和服务的主要手段,...

    xamarin学习笔记A03(安卓Activity)

    5. **Activity的启动模式**:Activity有四种启动模式:标准模式(Standard)、单实例模式(SingleTop)、单任务模式(SingleTask)和单栈顶模式(SingleInstance)。不同的启动模式会影响Activity如何被创建和管理,...

    Android学习笔记

    Android初步学习笔记 activity生命周期 docs/index.html 1、onCreate:第一次被启动、 2、onStart:activity可视时调用、 3、onResume:activity获得用户焦点是被调用、 4、onPause:启动另外一个activity时被调用、...

Global site tag (gtag.js) - Google Analytics