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


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

 

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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。