`
zhengjj_2009
  • 浏览: 149083 次
  • 性别: 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学习笔记-Activity篇

    Android学习笔记-Activity篇 Contents Android学习笔记-Activity篇 1 一、activity创建: 1 二、在manifest.xml中声明activity: 1 三、启动activity 1 3.1 启动不带返回结果的Activity 1 3.2 启动带有返回结果的...

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

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

    Android Activity学习笔记

    本文的是深入重点讲解Activity,主要Activity生命周期、Activity之间数据交互、Activity启动模式、Task和BackStack。

    Android学习笔记

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

    android学习笔记

    3.android学习笔记--activity生命周期&handler使用 4.android学习笔记--HandlerThread和Bundle 5.android学习笔记--SQLite 6.android学习笔记--下载文件 7.android学习笔记--Content Provider 8.android学习笔记--...

    Activity生命周期

    Android初学者的学习笔记。Activity的生命周期的简要了解。

    Android 学习笔记(1)--永远不变的Hello World

    让button来说hello word 、让菜单say hello、初识Activity、Activity的生命周期

    OPhone应用开发专题——【第一季】

    OPhone应用开发专题——【第一季】 OPhone 开发基础 第一章、Activity (生命周期等) 第二章、模拟器:Avd创建,adb命令 ...第四章、开发者学习笔记——View、Canvas、bitmap 第五章、综合应用贪吃蛇实例讲解

    java8集合源码分析-AndroidLearn:Android学习笔记

    生命周期 启动模式 ActivityManagerService PMS Art/Dalvik Http Http WebSocket Udp Kotlin 算法 快速排序 链表 重新排版 RxJava2 Glide GreenDao 其他 反编译 Hook 动态加载 编译构建 设计模式 代理模式 装饰者...

    java安卓仿微信聊天软件源码-AndroidDemo:整理一份自己学习android的合集

    Activity启动模式、生命周期; 2018/1/30 动画(补间动画、帧动画、属性动画)、动画监听; 2018/1/31 Android多线程、异步任务(AsycTask); 2018/2/1 网络、Http协议; 3/11将此前网络这里的部分熟悉下,关于网络部分有...

    移动开发Android学习(one)

    新建项目 这里选择基本的模板empty activity ...activity的生命周期 所有的布局文件都是写在xml里的(展开layout文件夹后,有个activity_main.xml) 运行 新建一个布局文件 新建一个LinearLayout(线性布局)

    NeverNote:一个简单的印象笔记 API 消费者应用

    3.- 学习印象笔记 SDK 依赖和文档。 4.- 按照 Evernote SDK 指南获得 API 密钥和沙盒帐户。 5.- 以一个 Activity 和 Fragment 为基础创建了一个新的 Android Studio 项目。 6.- 将这个新项目与 GitHub 存储库同步。...

Global site tag (gtag.js) - Google Analytics