(Android四大组件)---Activity

Android中的Activity是一个应用组件, 相当于iOS中的UIViewController ,  用户可与其提供的屏幕进行交互, 进行拍照,以及拨打电话, 发送电子邮件 或者查看点图等操作. 每个Activity都会获得一个用户绘制其用户界面的窗口. 窗口通常会充满整个屏幕 , 但也可小于屏幕并浮动在其他窗口之上.

  创建Activity需要注意在清单文件 mainifests中声明Activity.


一.

1. setContentView(); 函数是指定一个视图用来呈现内容. 绑定Java文件的.
2. mainifests -> AndroidMainifest.xml 是安卓程序的配置文件
3. java目录里放的是整个程序的源代码
4. res目录是所有的资源文件所存在的目录 例如 样式 视图xml
5. 绑定事件调用函数 findViewById(R.id.btnIdentifier).setOnClickListener(new View.OnClickListener() {
//Override
public void Onclick(View v) {
//响应事件
}
});
6. 跳转另一个Activity的方法是 startActivity(new Intent(MainActivity.this , AnOtherActivity.class ));
7. 跳转网页的方法 startActivity(new Intent(Intent.ACTION_VIEW , Uri.parse("http://www.baidu.com") ));

二. Activity的生命周期
onCreate(); //表示Activity正在被创建 , 生命周期内只调用一次 , 相当于iOS中的viewDidLoad(). 安卓中一般用来进行绑定控件,设置对应的响应事件
onStart(); //Activity变为在屏幕上对用户可见时调用
onResume(); //开始与用户交互时调用, 可见
onPause(); //Activity正在停止. 可见 ,失去焦点
onStop(); //Activity即将停止,且处于不可见状态
onDestory(); //Activity正在被销毁 , 在整个Activity生命周期内只调用一次
onRestart(); //Activity正在重新启动

当在一个Activity上启动另外一个Activity的时候:
第一个Activity onPause() --> 第二个Activity onCreate() --> onStart() --> onResume() --> 第一个Activity onStop()

当在第二个Activity返回第一个Activity的时候:
第二个Activity onPause() --> 第一个Activity onRestart() --> onStart() --> onResume() --> 第二个Activity onStop() --> onDestory()


三. 在Activity之间传递参数
1.基本数据类型
//传入
findViewById(R.id. btnStart ).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity. this ,TheAty. class );
i.putExtra( "data" , "Hello jikexueyuan!" );
startActivity(i);
}
});
//调用
Intent i = getIntent();
tv = (TextView) findViewById(R.id. tv );
tv .setText(i.getStringExtra( "data" ));

2 .传递数据包
//传入
findViewById(R.id. btnStart ).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity. this ,TheAty. class );
Bundle b = new Bundle();
b.putString( "name" , "极客学院" );
b.putInt( "age" , 2 );
// b.putBundle("bundleName",bundle);
i.putExtras(b);
startActivity(i);
}
});
//调用
Bundle data = i.getExtras();
tv = (TextView) findViewById(R.id. tv );
tv .setText(String. format ( "name=%s, age = %d, name1 = %s" ,data.getString( "name" ),data.getInt( "age" ),data.getString( "name1" , "leo" )));

3 .传递值对象
//自定义对象 Serializable Java 方式序列化
public class User implements Serializable{

private String name ;
private int age ;

public int getAge() {
return age ;
}

public String getName() {
return name ;
}

public void setAge( int age) {
this . age = age;
}

public void setName(String name) {
this . name = name;
}

public User(String name, int age){
this . name = name;
this . age = age;
}
}

//

//传入
findViewById(R.id. btnStart ).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity. this ,TheAty. class );
i.putExtra( "user" , new User( "呵呵哒" , 12 ));
startActivity(i);
}
});

//调用
Intent i = getIntent ();
User user = (User) i.getSerializableExtra( "user" );
tv = (TextView) findViewById(R.id. tv );
tv .setText(String. format ( "name=%s, age=%d" ,user.getName(),user.getAge()));

//反向传值
// A界面
findViewById(R.id. btnStart ).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity. this ,TheAty. class );
startActivityForResult(i, 0 );
}
});

@Override //类似于代理方法
protected void onActivityResult( int requestCode, int resultCode, Intent data) {
super .onActivityResult(requestCode, resultCode, data);
textView .setText(data.getStringExtra( "data" ));
}

// B界面
editText = (EditText) findViewById(R.id. editText );
button = (Button) findViewById(R.id. sendBackBtn );
button .setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.putExtra( "data" , editText .getText().toString());
setResult( 1 ,i);
finish();
}
});

Android 中 Activity 启动模式

标准启动模式 standard
standard是系统默认的启动模式,每次激活Activity时都会创建Activity,并且放入任务栈中
<? xml version= "1.0" encoding= "utf-8" ?>
<manifest xmlns: android = "http://schemas.android.com/apk/res/android"
package= "com.sahara.launchmode" >

<application
android :allowBackup= "true"
android :icon= "@mipmap/ic_launcher"
android :label= "@string/app_name"
android :roundIcon= "@mipmap/ic_launcher_round"
android :supportsRtl= "true"
android :theme= "@style/AppTheme" >
<activity android :name= ".MainActivity"
android :launchMode= "standard" > //此处是设置启动模式的
<intent-filter>
<action android :name= "android.intent.action.MAIN" />

<category android :name= "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

SingleTop 模式
如果在任务的栈顶正好存在改Activity的实例,就重用该实例,而不会创建新的Activity对象,不过它会调用onNewIntent() 方法.
如果栈顶部不存在就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建新的实例). 会回调onNewIntent()方法
android :launchMode= "singleTop" > //此处是设置启动模式的

SignleTask模式
如果在栈中已经有该Activity的实例,就重用该实例(会调用onNewIntent()方法)
重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈.
如果栈中不存在该实例,将会创建新的实例放入栈中.

SingleInstance 模式是一个独立的任务栈并且只放了一个实例Activity

显式Intent的使用
startActivity( new Intent(MainActivity. this, MyAty. class )) ;

注册Activity
<activity android :name=".MyAty" >
<intent-filter>
<category android : name="android.intent.category.DEFAULT" /> 默认DEFAULT一般就是Activity
<action android : name="com.jikexueyuan.learnitent.action.MyAty" />
</intent-filter>
</activity>

定义常量
public static final String ACTION = "com.jikexueyuan.learnitent.action.MyAty";

隐式Intent的使用 通过隐式可以跨应用启动其他程序的Activity
隐式 startActivity( new Intent(MyAty. ACTION ));

禁止Activity跨模块(工程)导出
<activity android :name=". MyAty " android :exported="false" />

通过浏览器链接启动本地Activity
浏览器端核心代码 <a href= "app://hello" > Launch My App </a>

安卓端核心代码配置 manifests/AndroidManifest.xml文件
<activity android :name=".LocalAppAty" android :label="LocalAppAty" >
<intent-filter>
<category android :name="android.intent.category.BROWSABLE" />
指定该Activity能被浏览器安全调用
<category android :name="android.intent.category.DEFAULT" />
<action android :name="android.intent.action.VIEW" />
<data android :scheme="app" />
</intent-filter>
</activity>
//获取并且打印Web端传来的完整字符串
Uri uri = getIntent().getData();
System. out .println(uri);

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值