四大组件基本用法与介绍(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();
}
}
待续。。。

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

深入剖析Android四大组件(七)——Activity启动的4个阶段

在Activity的启动流程中,共有4个阶段: 1.第一阶段——启动信息翻译以及服务调用 2.第二阶段——Activity的相关处理 3.第三阶段——处理应用程序进程 4.第四阶段——显示应用程序并处...
  • liyuanjinglyj
  • liyuanjinglyj
  • 2015年11月21日 20:35
  • 5924

Android studio四大组件(一)(Activity)

Android中的四大组件(Activity、Service、BroadcastReceiver、Content Provider) 总体来说: Activity:Activity是An...
  • Kirito_j
  • Kirito_j
  • 2016年12月01日 21:24
  • 1351

安卓入门--四大组件--Service基本用法

Service是什么 Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行...
  • lw_zhaoritian
  • lw_zhaoritian
  • 2016年09月09日 16:48
  • 758

Android四大组件生命周期

四大组件的生命周期     介绍生命周期之前,先了解下任务的概念 任务就是Activity的栈,它由一个或多个Activity组成的共同完成” 应用程序” .栈底的是启动整个任务的Activity,栈...
  • u013068440
  • u013068440
  • 2015年10月29日 23:10
  • 799

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

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

深入四大组件之Activity

Activity是Android的四大组件之一,我是一个新手在刚刚开始学的时候并没有对其有更深入的了解,平时也就是会用。但是当别人问我activity的一些其他知识我还是一窍不通,所以就决定把andr...
  • SDDDLLL
  • SDDDLLL
  • 2016年12月09日 09:36
  • 519

四大组件Activity、Service、BroadcastReceiver、ContentProvider总结

四大组件Activity、Service、BroadcastReceiver、ContentProvide总结 一、Activity:用于前台表现功能 1、在Android的程序中,Activi...
  • benpao00
  • benpao00
  • 2016年09月14日 14:59
  • 329

4.Android四大组件之Activity基本用法

一、什么是Activity?       活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序中可以包含零个或多个活动,但不包含任...
  • hadues
  • hadues
  • 2015年07月26日 19:00
  • 1104

Android学习笔记(二)活动(Activity)

2.活动(Activity) 2.1 概念         活动是Android的基本组成单位,每个Activity都被定义为一个单独的类,且都继承自基类:android.app.Activity;它...
  • qq_16313365
  • qq_16313365
  • 2016年09月29日 14:24
  • 616

关于Eclipse的基本使用方法

安装JDK1.6具体安装方法如下:1)安装JDK直接双击“jdk-6u10-beta-windows-i586-p.exe”文件,出现许可证协议窗体。单击【接受】按钮,出现自定义安装窗体。单击【下一步...
  • leeshuqing
  • leeshuqing
  • 2009年02月16日 06:44
  • 10220
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:四大组件基本用法与介绍(1)--activity
举报原因:
原因补充:

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