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; } } }
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); } }
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); } }
<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>
<?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>
<?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>
<?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>
运行结果截图:
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 :用于子线程和主线程之前的通信。
采用是就消息模式,当子线程完成操作,给主线程发送消息。让主线程来处理显示的更新。
对话框的创建采用的是构建器模式:
注意啦:本章复习笔记未完,后面会继续更新完善。。。。。。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。