四大组件基本用法与介绍(1)--activity

原创 2015年11月21日 15:04:53

四大组件分为:activity、service、content provider、broadcast receiver。
一、activity --活动
1.acitivity 生命周期

1) 完整生命周期 onCreate onDestroy 一头一尾
2) 可视化生命周期 onStart onStop (onRestart)
3) 前台声明周期 onResume onPause
启动顺序:onCreate()——>onStart()——>onResume()
销毁顺序:
(情况一)onPause()——><Process Killed>

  (情况二)onPause()——>onStop()——><Process Killed>

  (情况三)onPause()——>onStop()——>onDestroy()

存储数据放在:onPause();
意外关闭 : onSaveInstanceState(Bundle outState)
代码如下:
// 将数据保存到outState对象中, 该对象会在重建activity时传递给onCreate方法
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("temp", temp);
}
在下次主窗口的onCreate()方法中:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 从savedInstanceState中恢复数据, 如果没有数据需要恢复savedInstanceState为null
if (savedInstanceState != null) {
temp = savedInstanceState.getString("temp");
System.out.println("onCreate: temp = " + temp);
}
}

2 activity启动的四种模式
首先了解下任务栈:每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序
(1)standard:每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;
(2)singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例
(3)singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop
(4)singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例
退出所有活动的方法:
1.将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent函数,并在函数中加上一句finish。
2.通过给每个activity注册一个广播,然后要退出所有程序时,只要发送这个广播即可。

3.activity的跳转 : startActivity(intent); startActivityForResult(mIntent, requestCode);---推荐使用该方法
//先设置好意图 和 请求码
requestCode = 0;
startActivityForResult(mIntent, requestCode);


//第二个activity 通过意图传递数据,设好请求码
this.setResult(resultCode, mIntent);

//重写该方法 处理请求码
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if(requestCode==2){
if(resultCode==RESULT_OK){
String location = data.getStringExtra("location");
TextView tv = (TextView)this.findViewById(R.id.textView1);
tv.setText("所在位置为:"+location);
}else{
Toast.makeText(this, "取消定位", Toast.LENGTH_LONG ).show();
}
}
}




4. activty 线程间通讯 Handler + (新线程)sendMessage + (ui线程)handleMessage
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 2秒后,跳转到后台页面
// 注意,千万不要在主线程中做一些耗时间的,会阻塞窗口渲染的工作.要做,就放在新的线程中做

new Thread(){
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent i = new Intent(MainActivity.this, IndexActivity.class);
startActivity(i); // android中有一个堆栈[A]
//finish();
};
}.start();
*/

/*
Timer t = new Timer();
t.schedule(new TimerTask() {

@Override
public void run() {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, IndexActivity.class);
startActivity(i); // android中有一个堆栈[A]
finish();
}
}, 5000);


Handler handler = new Handler();
handler.postDelayed(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, IndexActivity.class);
startActivity(i); // android中有一个堆栈[A]
finish();
}
}, 4000);
}


5.使用 ActivityUtils + baseActivity
我们定义一个基类活动,然后在配合一个活动集合的工具类把所有活动都添加进去,面向对象的退出app,而且也可以更容易的操作我们活动中的 方法
先上代码:
定义ActivityUtils
public class ActivityUtils {
// 声明一个集合用于记录所有打开的活动
private static ArrayList<Activity> list = new ArrayList<Activity>();

// 加入活动对象------>onCreate
public static void add(Activity activity){
list.add(activity);
}

// 移除一个具体的活动--->onDestroy
public static void remove(Activity activity){
list.remove(activity);
}

// 关闭所有存在的活动---->close
public static void removeAll(){
for(Activity activity : list){
if(! activity.isFinishing()){
activity.finish();
}
}
}
}

定义 baseActivity 把 共同的方法都提出来
public class BaseActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 这个父类不需要设置内容, 因为他的目标不是要显示, 而是要为子类提供公共性操作
ActivityUtils.add(this);
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
ActivityUtils.remove(this);
}
public void show(String message){
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
待续。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

仿ios可上提下拉的ScrollView

新建仿ios可上提下拉ScrollView的Java类,直接在xml布局文件中包含所需控件即可 package com.zhansy.mytext; import android.content....
  • azhansy
  • azhansy
  • 2015年08月06日 15:34
  • 336

Activity基本介绍

Activity笔记

四大组件基本用法与介绍(2)-- BroadcastReceiver

1.什么是广播? 简单来说,它是一个系统全局的监听器,用于监听系统全局的Broadcast消息,所以它可以很方便的进行系统组件之间的通信。但是注意,广播不适合做耗时的操作。 2.广播的种类 普通广播...

Android学习笔记(1)————Android四大组件之一(Activity)

/********************************************************************************************  * au...
  • conowen
  • conowen
  • 2012年02月18日 19:28
  • 9087

Android开发总结笔记 四大组件之Activity(下) 1-2-3

本篇文章介绍关于Activity的管理机制(文档),此处是关于framework层的一个概念,不过太深的咱不懂,所以就讲一下Task和Activity栈的关系 接下来就是Activity的四种加载方式...

Android 四大组件之 Activity(1)--生命周期

Activity     activity类处于android.app包中,继承体系如下:         1.java.lang.Object         2.androi...

【Android】四大组件(1)Activity详解

准备将Android再系统的学一下,之前的学习属于项目驱动型,要实现什么功能,就去网上搜,各种抄代码,堆接口,最终一个臃肿的项目搭建出来,之前对java的学习也是匆匆的过了一遍,面向对象的思维都没有形...

Android入门 ——四大组件Activity(1)

Android 四大组件之Activity

Android之旅1-Android四大组件之Activity篇

关于为什么要写属于自己的博客,我在前一篇文章中也提到了。主要是归纳自己这一个时期所学到的知识,帮助自己更好的理解,同时一旦忘了某一处,还可以有个地方快速的查到。我也打算在写这些博客期间,将官方文档回顾...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:四大组件基本用法与介绍(1)--activity
举报原因:
原因补充:

(最多只允许输入30个字)