您的位置:首页 > 移动开发 > Android开发

Activity

2016-03-30 17:02 483 查看
运行环境: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生命周期



详看博客:两分钟彻底让你明白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中已经有了的act
b891
ivity的话会把他直接调到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存在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android Activity