不负时间馈赠努力,活成自己喜欢的样子; 不要急,你和那些好东西总有一天会相遇。
Activity
Activity是Android应用程序的四大组件之一,它负责管理Android应用程序的用户界面。
例:
- onKeyDow(int keyCode,KeyEcent event):对应按键按下事件
- onKeyUp(int keyCode,KeyEcent event):对应按键松开事件
- onTouchEvent(KeyEcent event):对应点击屏幕事件
onKeyDown()监听手机屏幕上的按键,应用场景通常是我们要退出一个软件时。
private long clickTime = 0L;//除始时间
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// 当第二次点击时间范围不(>2000)那么就退出该程序
if (System.currentTimeMillis() - clickTime > 2000) {
Toast.makeText(this, "在按一次退出!", Toast.LENGTH_SHORT).show();
clickTime = System.currentTimeMillis();//将第一次点击的时间赋给它
} else {
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
响应屏幕触摸事件
// 触摸事件点击和松开都会响应
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();//获取屏幕的x轴坐标
float y = event.getY();//获取屏幕的y轴坐标
// Log.d(TAG, "点击时改坐标处于屏幕的:" + x + ":" + y);
Toast.makeText(MainActivity.this, "点击时改坐标处于屏幕的:("+x+" : "+y+")", Toast.LENGTH_SHORT).show();
return super.onTouchEvent(event);
}
响应按键松开事件
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Toast.makeText(MainActivity.this, "按钮弹起", Toast.LENGTH_SHORT).show();
// Log.d(TAG, "按钮弹起: ");
return super.onKeyUp(keyCode, event);
}
Activity生命周期
生命周期就是一个对象从创建到销毁的过程,每个对象都有自己的生命周期。同样Activity也具有生命周期,Activity生命周期分为三种状态,分别是运行状态,暂停状态,和停止状态。
- 运行状态
- 暂停状态
3.停止状态
Activity的启动模式
-
standard模式
- 是Activity的默认启动模式,在不指定的情况下,所有的Activity都默认为standard启动模式。
- 处于该模式下的Activity每次启动都是一个新的Activity,它就会进入任务栈并且处于栈顶的位置,它不会判断栈中是否存在该Activity每次都会创建一个新的实例
-
singleTop模式
- 该模式和standard模式很相似,但是如果在该模式下Activity处于栈顶的位置,那么它不会重写创建而是直接使用,如果不处于栈顶,则创建一个新的实例位于栈顶。
-
singleTask模式
- 如果希望Activity中只存在一个实例,可以使用该模式当Activity启动模式指定为singleTask,每次启动该Activity中,都会先检查栈中是否存在该实例,存在则使用,并将Activity之上的所有Activity出栈,如果没有则创建。
-
singlelnstance模式
- 在程序开发中,如果需要Activity在整个系统中都只有一个实例,这时就需要用到该模式。不同于上面3种模式,使用该模式的Activity会启动一个新的任务栈来管理这个Activity。
Intent在Activity中的作用
翻译为意图,Intent最常见的用途是绑定应用程序组件,并在应用程序之间进行通信。一般用于启动Activity、启动服务、发送广播等,承担了Android应用程序Activity、Service、BroadcastReceiver
三大核心组件相互的通信功能。
Intent又分为显式意图和隐式意图。
显式意图:通过Intent启动Activity时,需要明确指点激活组件的名称。在程序中,如果需要在Activity启动另一个Activity时可以使用显式意图来启动。
// 参数1:该Activity;参数2:需要跳转的Activity文件名
Intent intent=new Intent(this,MainActivity2.class);
startActivity(intent);
隐式意图:没有明确指定组件名的Intent为隐式意图。Android会根据隐式意图中设置的动作(action),类别(category),数据(Uri和数据类型)找到合适的组件。
<activity
android:name=".MainActivity2"
android:exported="true" >
<intent-filter>
<action android:name="cn.itscast.guo" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
隐式跳转:
Intent intent=new Intent();
intent.setAction("cn.itscast.guo");
startActivity(intent);
相比于显式,隐式的功能更加强大,显式跳转必须指点跳转的文件名,而隐式不仅可以跳转Activity,还可以打开其他的应用组件,比如照相机,浏览器等都可以通过隐式跳转来打开
// 跳转网路设置界面
Intent intent = new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS);
startActivity(intent);
Activity中的数据传递
Activity传值
Intent intent=new Intent(this,MainActivity2.class);
// 通过键值对的方式传值。
intent.putExtra("text",textView.getText().toString());
startActivity(intent);
Activity接收
// 获取Activity传值意图
Intent intent=getIntent();
// 看传过来的是什么数据类型,如果是字符串就用getStringExtra接收,如果是整形就用getIntExtra接收
String n=intent.getStringExtra("text");
第二个Activity回传数据
String it="我是回传的数据";
Intent intent1=new Intent();
intent1.putExtra("eq",it);
setResult(1,intent1);
第一个Activity接收数据
Intent intent=new Intent(this,MainActivity2.class);
startActivityForResult(intent,1);
// 接收数据的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data!=null){
if (resultCode==1){
if (requestCode==1){
String s= (String) data.getSerializableExtra("eq");
textView.setText(s);
}
}
}
}
走正确的路,放无心的手,结有道之朋,断无义之友,饮清净之茶,戒色花之酒,开方便之门,闭是非之口。