Activity与Intent

android5个进程等级

1.Activity process(critical priority):活动进程(前台进程)

2.Visible process(High priority):可见进程

3.Started Service process(High priority)

4.Background process(Low priority)

5.Empty process(Low priority)

退出进程:

System.exit(8);//系统进程正常退出

Process.killProcess(Process.myPid);//类似于垃圾回收

Activity创建过程:

1.建立Activity类及定义属性及内部方法;

2.注册Activity到manifast中;

3.在启动中使用onCreat()实现业务:

  (1)界面定义

  (2)setContentView()加载页面;

//将layout压缩成View
View view=this.getLayoutInflater().inflate(R.layout.activity_activity_demo, null);

Intent:

Intent有两种:Explicit intents(明确的意图);Implicit intents (含蓄的意图)

Explicit intents:通过组件名启动

Implicit intents:通过匹配manifest file中的Intent filter来启动组件,若匹配结果仅有一项,直接启动;若多项匹配,根据弹出的dialog进行选择

1.Explicit intents

Intent属性:Component:启动Explicit intents必不缺少的

		//显示启动Intent,必须指定Intent属性Component,Component属性需要指定ComponentName
		
		//1.直接创建时指定
		Intent intent=new Intent(ActivityDemoActivity.this, ActivityIntentDemo.class);
		
		Intent intent=new Intent();
		//2.通过ComponentName构造器来指定;只须指定包名与类名就可以唯一确定组件名
		ComponentName componentName=new ComponentName("androidstudy.ActivityDemo","androidstudy.ActivityDemo.ActivityIntentDemo");
		ComponentName componentName=new ComponentName(ActivityDemoActivity.this,ActivityIntentDemo.class);
		ComponentName componentName=new ComponentName(ActivityDemoActivity.this,"androidstudy.ActivityDemo.ActivityIntentDemo");
		intent.setComponent(componentName);
		
		//3.setClass()与setClassName()指定
		intent.setClass(ActivityDemoActivity.this, ActivityIntentDemo.class);
		intent.setClassName(ActivityDemoActivity.this, "androidstudy.ActivityDemo.ActivityIntentDemo");
		intent.setClassName("androidstudy.ActivityDemo","androidstudy.ActivityDemo.ActivityIntentDemo");
		
		startActivity(intent);

返回Intent传递参数是否成功

调用startActivityForResult(intent, 1234);

intent是传递的Intent,1234为RequestResult,成功后回调函数protected void onActivityResult(int requestCode, int resultCode, Intent data) ;

在新的Activity 中通过调用函数setResult(5678,mIntent);设置回调的resultCode与Intent

//调用Intent的Activity
public void demo(View view){		
		//显示启动Intent,必须指定Intent属性Component,Component属性需要指定ComponentName
		
		//1.直接创建时指定
		//Intent intent=new Intent(ActivityDemoActivity.this, ActivityIntentDemo.class);
		
		intent=new Intent();
		//2.通过ComponentName构造器来指定;只须指定包名与类名就可以唯一确定组件名
		//ComponentName componentName=new ComponentName("androidstudy.ActivityDemo","androidstudy.ActivityDemo.ActivityIntentDemo");
		//ComponentName componentName=new ComponentName(ActivityDemoActivity.this,ActivityIntentDemo.class);
		//ComponentName componentName=new ComponentName(ActivityDemoActivity.this,"androidstudy.ActivityDemo.ActivityIntentDemo");
		//intent.setComponent(componentName);
		
		//3.setClass()与setClassName()指定
		intent.setClass(ActivityDemoActivity.this, ActivityIntentDemo.class);
		//intent.setClassName(ActivityDemoActivity.this, "androidstudy.ActivityDemo.ActivityIntentDemo");
		//intent.setClassName("androidstudy.ActivityDemo","androidstudy.ActivityDemo.ActivityIntentDemo");
		
		intent.putExtra("STUDY", "hello 阳光 ");
		
		startActivityForResult(intent, 1234);
	}
	 
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		
		if(resultCode==5678){
			Toast.makeText(ActivityDemoActivity.this, data.getExtras().getString("STUDY"), Toast.LENGTH_LONG).show();
			System.out.println(intent.getStringExtra("STUDY"));
		}
		super.onActivityResult(requestCode, resultCode, data);
	};
//接收Intent的Activity
public void click(View view){
		mIntent.putExtra("STUDY", "hello moon");
		//设置返回值
		setResult(5678,mIntent);
		//关闭此Activity
		finish();
	}

2.Implicit intents

                //隐式启动Intent
		//启动电话Activity,Action:Intent.ACTION_DIAL		
		Intent intent=new Intent();
		intent.setAction(Intent.ACTION_DIAL);
		intent.setData(Uri.parse("tel:15169091171"));
		startActivity(intent);

		//启动电话Activity,Action:Intent.ACTION_CALL
		Intent intent=new Intent();
		intent.setAction(Intent.ACTION_CALL);
		intent.setData(Uri.parse("tel:15169091171"));
		startActivity(intent);                

通过代码分析 Action:Intent.ACTION_DIAL与Activity,Action:Intent.ACTION_CALL区别:

  DIAL启动的Action并不会直接拨号,需用户进行确然拨号;

  ACTION_CALL启动的Action可直接进行拨号,但需要在manifest.xml文件中加上权限<uses-permission android:name="android.permission.CALL_PHONE"/>

                Intent intent=new Intent();
		intent.setAction("moon.testDemo");
		intent.setData(Uri.parse("http://www.hao123.com"));
		startActivity(intent);
xml:
    <activity 
            android:name=".ActivityIntentDemo">
            <intent-filter>
                <action android:name="moon.testDemo"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="http"/>
            </intent-filter>
        </activity>        

备注:1.虽然Activity中并没有设置category属性,但默认设置属性为DEFAULT,所以在manifest.xml文件中要添加

<category android:name="android.intent.category.DEFAULT"/>,否则,运行会出现错误。

2.若        SaveInstanceState()函数会自动保存我们提供android:id的空间

2.状态恢复onRestoreInstanceState()或onCreat():onResume()之前调用

备注:

1.重构onSaveInstanceState()与onRestoreInstanceState()函数时,需调用父类函数;

2.onRestoreInstanceState()函数不一定会被调用,一般恢复函数使用onCreat();

3.由于onSaveInstanceState()函数不一定会被调用,所以一般存储短暂的状态,存储长期状态一般使用onPause();

ConfigurationChanges

获取configuration Configuration cfg=getResources().getConfiguration()

 

Activity基类:

FragmentActivity、AccountAuthenticatorActivity(实现账户管理界面)、TabActivity(Tab界面)、ListActivity(列表界面)、LauncherActivity(Activity列表界面)、PreferenceActivity(程序参数设置存储界面)、AliasActivity(别名Activity基类,用于开始别人时结束自己)、ExpandableListActivity(可扩展列表界面)

 

posted @ 2014-01-10 17:47  Eudora_Do  阅读(274)  评论(0编辑  收藏  举报