1. Activity:界面,一个包含用户界面的组件,主要用于与用户进行交互,提供一个屏幕,用户可以用来交互为了完成某项任务。
2. 不建议直接修改text,可以按F3或者在res->value->strings.xml下修改
3. 程序的配置文件 manifests->androidmanifests.xml
java :程序源代码
res :所有的资源文件,包括布局菜单
4. 活动都必须在Android Manifests.xml中注册
<intent-filter>
<action android:name="....."/> //
<category android:name="....."/> //这两行声明了这是主活动,打开app,先出现它
</intent-filter>
5. 所有活动都继承自Activity或间接继承自(安卓提供的活动基类)
Activity的两个方法:
···1:onCreate()
···2:onCreaeOptionsMenu()
6. 逻辑与视图分离原则 onCreate()会调用setContentView()方法
7. 将text的string的值放在string.xml中,可以选值后按住alt+enter
8. res文件
···1 drawable:存放图片
···2 menu:菜单文件
···3 strings:存放字符串
9. 在XML文件中可通过@string/hello_world获得字符串引用
10. 图标AndroidManifest.xml通过android:icon指定
11.隐藏标题栏
requestWindowFeature(Window.Feature_NO_TITLE);
12. Toast提醒方法:
Button button1=(Button)findViewById(R.id.button_1)
button1.setOnClickListener(new OnclickListener(){
public void onClick(){
Toast.makeText(FirstActivity.this,"....",Toast.Length.short.show())
})
13.
居中:android:gravity="center"
颜色:android:textColor="@color/red"
或在xml中 #FF0000 字体大小:android :textSize="65px"
14. 销毁活动
finish();
15.使用Intent在活动中穿梭,Intent是安卓程序中各组件之间进行交互的一种方法
显式Intent:
Intent intent1=new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent1);
隐式Intent
Intent intent1=new Intent(Intent.ACTION_VIEW);
intent1.setData(Uri.parse("http://www.baidu.com"));
intent1.setData(Uri.parse("tel:10086"));
startActivity(intent1);
16.向下一个活动传递数据
在FirstActivity中
String Data="Halloween night";
Intent intent1=new Intent(FirstActivity.this,SecondActivity.class)
intent1.putExtra("extra_data",data);
startActivity(intent1);
第一个参数是键,第二个参数才是要传递的值
在SecondActivity中
Intent intent =getIntent();
String Data=intent.getStringExtra("extra_data");
17.将数据返回给上一个活动
startActivityForResult(),用于启动活动,但在活动销毁之前能够返回一个结果给上一个活动
首先FirstActivity
public void onClick(View v){
Intent intent1=new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent1,1); //1是请求码,只要是唯一的值就可以
}
在按钮返回SecondActivity中:
public void onClick(View v){
Intent intent2=new Intent();
intent2.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent2); //第一个参数用于向上一个活动返回数据,一般只有RESULT_OK或RESULT_CANCELED两个值,第二个参数则是把带有数据的Intent传递回去
finish();
}
在back返回SecondActivity中(重写onBackPressed()):
public void onBackPressed(){
Intent intent=new Intent();
intent.putExtra("data_return","Halloween night");
setResult(RESULT_OK,intent);
finish();
}
由于在SecondActivity被finish()后会回调上一个活动的onActivityResult()方法,因此我们需要重写这个方法
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch(requestCode){
case 1:
if (resultCode==RESULT_OK){
String returnedData=data.getStringExtra("data_return");
}
break;
}}
***第一个参数requestCode,即请求码,zplus所给值为1。第二个参数是reultCode,即我们返回数据传入的结果,第三个data即携带返回数据的Intent
18. 活动状态
每个活动在其生命周期最多可能有四个状态
···1.运行状态--处于栈顶
···2.暂停状态--不处于栈顶,但仍然可见
···3.停止状态--不处于栈顶,且不可见
···4.销毁状态--当一个活动从返回栈中移除后就变成销毁状态
19. 活动的7个回调方法
···1 onCreate() 每个活动我们都重写这个方法,他会在活动第一次被创建的时候调用
···2 onStart() 活动由不可见到可见的时候调用
···3 onResume() 这个活动在活动准备好与用户进行交互的时候调用,处于站定且一直在与运行中
···4 onPause() 系统准备去调用或者启动另一个方法时,通常在这个方法中将一些消耗cpu的资源释放掉,以及保留一些关键数据
···5 onStop() 在活动完全不可见的时候调用,与onPause()的区别是如果启动的新活动是一个对话框式的活动,那么onPause会得到执行,而onStop不会
···6 onDestory() 在活动被销毁之前调用,调用之后状态就变成销毁了
···7 onRestart() 这个活动由停止状态变成运行状态之前调用,也就是活动被重新启动了
20. B活动在A活动的基础上启动,活动A就进入了停止状态,由于内存不足,A被回收,再Back返回后,A会执行onCreate()方法,而不是onRestart(),这样可能会使A中输入的东西被清空,降低用户的体验,以防这样,提供了onSaveInstanceState()回调方法,可以解决活动被回收时临时数据得不到保存
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
String tempData="someone likes you";
outstate.putString("data_key",tempData);
}
//一般来说,onCreate()方法也有Bundle参数,且一般一直为null
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
if (saveInstanceState!=null)
{
String tempData=saveInstanceState.getString("data_key");
}
}
21. 活动的启动模式,在AndroidManifests.xml
···1.standard
活动默认的启动方式,每次启动一个活动,都会在返回栈中入栈,并处于栈顶位置,不管栈中是否存在,都会重新再创建一个新的实例
···2.singleTop
在启动活动时,如果发现返回栈的栈顶已是该活动,则认为可以直接使用它,不会再重新创建新的活动实例,当singleTop未处于栈顶,还会再创建新的
···3.singleTask
每次启动之前都会检查返回栈中是否有该活动的实例,如果发现有,则把上面的一一出栈
···4.singleInstance
会启动新的返回栈管理这个活动。比如从A到B再到C活动,且B为singleInstance模式,那么B在新栈,在C中Back会返回到A,因为A,C在旧栈,在A,B中Back,会退出
***返回栈的id:getTaskId()
22. 知晓你再哪个活动
···1新建一个BaseActivity继承自Activity,重写onCreate()方法
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
Log.d("BaseActivity",getClass().getSimpleName());
}
···2然后让所有的活动都继承自BaseActivity,这时候可以观察LogCat的打印信息,活动的类名会打印出来
23.随时随地退出程序
···1.新建一个ActivityCollector类作为活动管理器
public class ActivityCollector{
public static List activities=new ArrayList();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
//finish()方法用于结束一个Activity的生命周期,而onDestory()方法则是Activity的一个生命周期方法,其作用是在一个Activity对象被销毁之前,Android系统会调用该方法,用于释放此Activity之前所占用的资源。
finish会调用到onDestroy方法,
public static void finishAll(){
for (Activity activity:activities)
{
if (!activity.isFinishing())
{activity.finish();}
}}}
然后写BaseActivity类继承自Activity类,并重写它的onCreate()和onDestroy()函数。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}
public void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
让所有的活动都继承自BaseActivity,在按钮的功能写
public void onClick(View v){
ActivityCollector.finishAll();
}