首页 > 代码库 > java攻城狮之路(Android篇)--Activity生命

java攻城狮之路(Android篇)--Activity生命

1 写一个类 extends Activity
Activity是android的四大组件之一。

Activity的激活分为显式意图激活和隐式意图激活。

如果一个activity希望别人隐式意图激活:
则要配置过滤器
1 action = ""
2 有一个缺省的category,(可以有多个category),若不配置该类型会发生这样的一个错误:Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=cn.itcast.action.main3 }

设置scheme标识如: http://    content://   tel:

隐式意图激活:就是看要要激活的组件里面的intent-filter,看它是如何编写要有action,category,data。

配置意图过滤器就相当于给一个activity取了一个别名。一个activity可以配置多个intent-filter

练习:

package com.shellway.itentab;import android.support.v7.app.ActionBarActivity;import android.content.ClipData.Item;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;public class MainActivity extends ActionBarActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void open(View view){        switch (view.getId()) {        case R.id.bt_open1:            //4种显式意图激活方式            Intent intent1 = new Intent(this,Main2Activity.class);            //    intent.setClass(this, Main2Activity.class);            //     intent.setClassName(this, "com.shellway.itentab.Main2Activity");            //    intent.setClassName("com.shellway.itentab", "com.shellway.itentab.Main2Activity");            startActivity(intent1);            break;        case R.id.bt_open2:            Intent intent2 = new Intent();            //设置动作            intent2.setAction("com.shellway.itent.Main3Activity");            //设置数据    //        intent2.setData(Uri.parse("shellway:"));            //设置类型    //        intent2.setType("image/jpeg");            //若设置了类型,它就必须和数据一起设置,分开设置不行            intent2.setDataAndType(Uri.parse("shellway:"), "image/jpeg");            startActivity(intent2);            break;        case R.id.bt_open3:            Intent intent3 = new Intent();            intent3.setAction("android.intent.action.VIEW");            intent3.setData(Uri.parse("http://www.baidu.com"));            startActivity(intent3);            break;        default:            break;        }            }}
MainActivity.java
package com.shellway.itentab;import android.app.Activity;import android.os.Bundle;public class Main2Activity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);    }}
Main2Activity.java
package com.shellway.itentab;import android.app.Activity;import android.os.Bundle;public class Main3Activity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main3);    }}
Main3Activity.java
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"     >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="这是第一个activity" />    <Button         android:id="@+id/bt_open1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="open"        android:text="显示意图激活"        />    <Button android:id="@+id/bt_open2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="open"        android:text="隐式意图激活"        />    <Button android:id="@+id/bt_open3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="open"        android:text="打开浏览器"        /></LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >        <TextView          android:layout_width="match_parent"            android:layout_height="match_parent"            android:text="显式意图激活"        /></LinearLayout>
activity_main2.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >        <TextView         android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:text="隐式意图激活"        />    </LinearLayout>
activity_main3.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.shellway.itentab"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="21" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <!-- 第一个activity  -->        <activity            android:name=".MainActivity"            android:label="第一个activity" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <!-- 第二个activity 显式激活-->        <activity android:name=".Main2Activity" android:label="第二个activity" />        <!-- 第三个activity 隐式激活 -->        <activity android:name=".Main3Activity" android:label="第三个activity">            <intent-filter >                <action android:name="com.shellway.itent.Main3Activity" />                <category android:name="android.intent.category.DEFAULT" />                <data android:scheme="shellway"  android:mimeType="image/jpeg" />            </intent-filter>        </activity>            </application></manifest>
AndroidMainfest.xml

运行结果截图:

 

Bundle 其实是对应HashMap的封装。该类本身实现了Parceleable接口。

Activity的作用:
起显示作用,他是用来和用户交互的。也是一个view的容器

1 完整的生命周期:
onCreate() --> onStart() --> onResume() activiyt已经正常显示
点击回退键
onPause() --> onStop() --> onDetroy()

2 可视的生命周期
onCreate() --> onStart() --> onResume() activiyt已经正常显示
打开一个activity。该activity完全覆盖上一个activity
onPause() ---> onStop()
点击回退键
onRestart() --> onStart() ---> onResume()
点击回退键
onPause() --> onStop() --> onDetroy()

3 android:theme="@android:style/Theme.Dialog"
就可以把activity变成对话框的效果
onCreate() --> onStart() --> onResume() activiyt已经正常显示
打开一个activity。该activity没有完全覆盖上一个activity
onPause()
点击回退键
onResume()

横竖屏切换的时候:
竖屏到横屏:activity首先被销毁,在创建一个新的activity
横屏到竖屏:activity首先被销毁,再创建一个新的activity,再把该activity销毁,再创建一个新的activity.(是由于输入法的影响)

任务栈 task Process 进程

task的作用:就是用来管理activity的进入,退出。记录了用户的行为。
位于任务栈栈顶的activity就是和用户交互的。
任务栈里面存放的是:activity的引用


activity的启动模式:
进程:是一个应用程序运行的空间。一个android应用就是一个进程。进程就有他自己的内存空间。
一个进程里面可以有多个线程。在两个进行之间进行切换是非常好性能。
线程:一个控件单元。

一个task可以对应多个进程。
每个activity的实例是运行在自己的进程里面。

activity程序默认是一个单独的线程里面来运行。onCreate() 按钮点击回调事件、对于显示的操作都是在主线程里面运行。UI线程。
联网获取数据
大文件的拷贝
都需要放置在子线程来操作。
08-29 08:07:41.200: E/AndroidRuntime(1327):
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.


只有主线程才能对显示进行操作。

Handler :用于子线程和主线程之前的通信。
采用是就消息模式,当子线程完成操作,给主线程发送消息。让主线程来处理显示的更新。


对话框的创建采用的是构建器模式:

 

 注意啦:本章复习笔记未完,后面会继续更新完善。。。。。。

 

java攻城狮之路(Android篇)--Activity生命