Activity

运行环境:Android Studio 1.5
模拟器:Genymotion

Activity基础

概念

Activity就是一个可视化的用户界面,负责创建一个屏幕窗口,防止UI组件,供用户交互。

用法

  • 1.创建你的Activity类
  • 2.在AndroidManifest.xml中注册
  • 3.设置布局文件

AndroidManifest.xml

  • 应用程序的清单文件
  • xml是一种标记语言

Activity启动方法

显式启动

class跳转

  • 新建一个类继承Activity
  • protected
  • onCreate
  • SetContentView
  • 按钮监听
    • Button btnStart;
    • btnStart=(Button) findViewById(R.id.btn_start_second)
    • btnFinish.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){//关闭自己}}; )
  • 第一种方法
    • Intent intent = new Intent();
    • intent.setClass(MyActivity.this, SecondActivity.class);
    • startActivity(intent);

包名类名跳转

 - Intent intent1 = new Intent();
 - intent.setClassName(MyActivity.this, "com.lkj.lesson.activitylesson1.SecondActivity");
 - startActivity(intent1);

第三种方法

 - Intent intent = new Intent();
 - ComponentName componentName = new ComponentName(MyActivity.this, SecondActivity.class);
 - intent.setComponent(componentName);
 - startActivity(intent);

隐式跳转

隐式启动第一种写法

  • Intent intent = new Intent(“abcd.SecondActivity”);//构造intent时传入action name
  • startActivity(intent);

隐式启动第二种写法

  • Intent intent = new Intent();//构造intent完成后设置action name
  • intent.setAction(“abcd.SecondActivity”);
  • startActivity(intent);

注意

  • 如果自己定义的某个Activity要通过隐式启动,在AndroidManifest.xml的category标签必须加上android.intent.category.DEFAULT,否则不起作用

注意事项

  • category标签必须设置成DEFAULT

Action

  • 代表系统中已经定义的一系列常用的动作,可以启动你想要的动作
  • 属性的值是一个字符串
  • 通过setAction()方法或在清单文件AndroidManifese.xml中设置
  • 当有多个Action匹配隐式启动条件时,将会弹出选择框

Category

  • 指定当前Action被执行的环境
  • 通过addCategory()方法或在清单文件AndroidManifest.xml中设置
  • 常用值
    • android.intent.category.LAUNCHER设置该组件为在当前应用程序启动器,通常为入口ACTION_MAIN配合使用
    • android.intent.category.DEFAULT是安卓系统中木人的执行方式,按照普通Activity的执行方式执行。

Activity生命周期

Activity生命周期
详看博客:两分钟彻底让你明白Android Activity生命周期(图文)!知识库博客园 http://kb.cnblogs.com/page/70125/
Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码:

view plaincopy to clipboardprint?
public class Activity extends ApplicationContext {  
       protected void onCreate(Bundle savedInstanceState);  
       protected void onStart();     
       protected void onRestart();  
       protected void onResume();  
       protected void onPause();   
       protected void onStop();  
       protected void onDestroy();  
   }  

举个例子,修改ActivityDemo.java(我这里重新写了以上的七种方法,主要用Log打印),代码如下:

package com.tutor.activitydemo;  
import android.app.Activity;  
import android.os.Bundle;  
import android.util.Log;  
public class ActivityDemo extends Activity {  
    private static final String TAG = "ActivityDemo";  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        Log.e(TAG, "start onCreate~~~");  
    }  
    @Override  
    protected void onStart() {  
        super.onStart();  
        Log.e(TAG, "start onStart~~~");  
    }  
    @Override  
    protected void onRestart() {  
        super.onRestart();  
        Log.e(TAG, "start onRestart~~~");  
    }  
    @Override  
    protected void onResume() {  
        super.onResume();  
        Log.e(TAG, "start onResume~~~");  
    }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        Log.e(TAG, "start onPause~~~");  
    }  
    @Override  
    protected void onStop() {  
        super.onStop();  
        Log.e(TAG, "start onStop~~~");  
    }  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        Log.e(TAG, "start onDestroy~~~");  
    }  
}  
  • 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
  • 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
  • 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
  • 4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
  • 5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
  • 6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
  • 7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

Activity启动模式

  • 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置;

四种启动模式

standard
singleTop
singleTask
singleInstance

Android入门:Activity四种启动模式 - meizixiong - 博客园
http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html

getTaskId()可以获取当前的taskid。

Intent几种常见的flags:
1.FLAG_ACTIVITY_NEW_TASK:APPa调用APPb会新建一个task
2.FLAG_ACTIVITY_CLEAR_TOP:启动task中已经有了的activity的话会直接跳到那个activity,并删除上面的activity。
3.FLAG_ACTIVITY_REORDER_TO_FRONT启动task中已经有了的activity的话会把他直接调到task最顶上,也不会删除任何activity.
4.FLAG_ACTIVITY_SINGLE_TOP:目前发现与Activity启动模式中的singleTop效果相同.

Activity数据传递

在第一个activity里设置intent.putExtra(“var”,”String_content”)
在第二个activity里调用getIntent().getStringExtra(“var”)

通过Intent传递基本数据类型
通过Bundle传递基本数据类型

复杂类型的数据传递Serializable
复杂类型的数据传递Parceable

activity数据回传
startActivityForResult(intent);
onActivityResult(requestCode, resultCode, data)
setResult(RESULT_OK, intent)

启动系统的Activity

需要申请权限

打开系统的拨号界面
intent.setAction(Intent.ACTION_CALL);
打开系统发送短信界面
Uri smsToUri = Uri.parse(“smsto:”+”10086”)
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(smsToUri);
intent.putExtra(“smsbody”)
打开系统相机界面
intent.setAction(Intent.ACTION_***_CAMERA);

Activity启动过程中的intentFilter

Data匹配的四条规则:
1. 如果data的URI和datatype为空,则 filter 的URI和type也必须为空,才能匹配成功
2. 如果data的URI不为空,但是datatype为空,则 filter 必须定义URI并匹配成功,且type为空,才能匹配成功
3. 如果data的URI为空,但是datatype不为空,则 filter 必须URI为空,定义type并匹配成功,才能匹配成功
4. 如果data的URI和data都不为空,则 filter 的URI和type都必须定义并匹配成功,才能匹配成功。对于URI部分,有一个特殊处理,就是即使filter没有定义URI,content和file两种URI也作为既存的URI存在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值