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(); }