理解一:activity是提供界面(UI)的一种组件。
理解二:Activity用于显示用户界面,用户通过Activity交互完成相关操作。
-onCreate():在Activity第一次被创建时调用
-onStart():在Activity由不可见变为可见时调用
-onResume():这个方法在Activity准备好和用户交互的时候调用。此时的Activity一定位于返回栈的栈顶,并处于运行状态
-onPause():这个方法在系统准备去启动或恢复另一个Activity的时候调用
-onStop():这个方法在Activity完全不可见的时候调用,它和onPause()方法的主要区别在于,如果启动的新 Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
-onDestroy():这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态
-onRestart():在这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
方法:Intent传值(传递对象或单个属性)
代码:
//step1:在第一个activity文件内设置 Intent intent = new Intent(OneActivity.this,TwoActivity.class); //跳转 intent.putExtra("aLogin",aLogin); intent.putExtra("aPassword",aPassword); startActivity(intent); //step2:在第二个activity内取值 Intent getIntent = getIntent(); String aLogin = getIntent.getStringExtra("aLogin"); String aPassword = getIntent.getStringExtra("aPassword"); //补充:用bundle进行封装,然后传值 Intent intent = new Intent(OneActivity.this,TwoActivity.class); Bundle bundle = new Bundle(); bundle.putString("aLogin",aLogin); bundle.putString("aPassword",aPassword); startActivity(intent);
方法:自定义全局类,用于储存临时数据
代码:
public class Constant { public static String aLogin; public static String aPassword; } //step1 Intent intent = new Intent(OneActivity.this,TwoActivity.class); Constant.aLogin = aLogin; Constant.aPassword = aPassword; startActivity(intent); //step2:这样我们在其他activity里随时可以取值,不受activity的限制 String aLogin = Constant.aLogin; String aPassword = Constant.aPassword; mEmailView.setText(mEmail); mPasswordView.setText(mPassword);
代码:
//从一界面跳到二界面 startActivityForResult(intent,code); //code是请求码,int类型 //二界面 Intent rIntent = new Intent(); rIntent.putExtra("sex",mSex); rIntent.putExtra("address",mAddress); setResult(resultCode,getIntent());//resultCode为返回码,用于区分从哪里返回 finish(); //使用onActivityResult方法接受此intent @Override protected void onActivityResult(int requestCode,int resultCode,Intent data) { user.setName(data.getStringExtra("sex")) Toast.makeText(this,data.getStringExtra("sex"),1).show(); super.onActivityResult(requestCode,resultCode,data); }
说明:在two中的定义一个回调接口,one中去实现这个接口原型,two中将你需要传的值(例如email)放到接口中two中执行此接口方法就ok,这样A就拿到了email了。
可以在任何类里使用回调,不仅限于activity方法二页适用于任何类
【注意】:虽然activity的启动模式并非传值,但是当某个activt跳到其他界面,然后关闭在回到当前界面的时候,有的需求需要可以保留本界面的一些数据,比如用户输入还没提交的一些数据,比如editview,等待上传的照片等。我们可以作为一种传值的方式。
说明:standard是默认的启动模式,即如果说明aunchMode属性,则自动就会使用这种启动模式,每次打开需开启新的activity
说明:如果要启动的这个Activity在当前Task中已经存在,并且还处于栈顶的位置,那么系统就不会创建一个该Activity的实例,而是调用栈顶Activity的onNewIntent()方法。声明成这种启动模式的Activity也可以被实例化多次,一个任务当中也可以包含多个这种Activity的实例。举个例子来讲,一个任务的返回栈中有A、B、C、D四个Activity,其中A在最底端,D在最顶端,这个时候如果我们要求再启动一次D,并且D的启动模式是standard,那么系统就会再创建一个D的实例放入到返回栈中,此时栈内元素为A-B-C-D-D。而如果D的启动模式是“single Top”的话,由于D已经是在栈顶了,那么系统就不会再创建一个D实例,而是直接调用D Activity的onNewIntent()方法,此时栈内元素仍然是A-B-C-D.
说明:这种启动模式表示,系统会创建一个新任务,并启动的Activity放入这个新任务的栈底位置。但是,如果现有任务当中已经存在一个该Activity的实例了,那么系统就不会再创建一个它的实例,而且会直接调用它的onNewIntent()方法。声明成这种启动模式的Activity,在同一个任务当中只存在一个实例。注意这里我们所说的启动Activity,都指的是启动其他应用程序中的Activity,因为“single Task”模式在默认情况下只有启动其它程序的Activity才会创建一个新任务,启动自己程序中的Activity还是会使用相同的任务。
说明:这种启动模式和“single Task”有点相似,只不过系统不会向声明成“singleInstance”的Activity所在的任务当中再添加其他Activity。也就是说,这种Activity所在的任务中始终只会有一个Activity,通过这个Activity再打开其他的Activity也会被放入到别的任务当中。
核心:使用ConstraintLayout布局的目的是为了减少嵌套。
android:gravity="center_vertical|left" //字体左侧垂直居中 android:text="服务协议" //文本内容 android:textSize="40sp" //文本大小 补充:android:gravity是对自身内容的限定 android:layout_gravity是对当前控件相对其父控件内容的限定
核心:适合水平数值排列,且每行(列)包含内容简单(内容少)