新建一个Activity会生成一下内容:
其中里面的setConentView(), 是给Activity加载一个布局,里面传入的是一个布局文件的id。
新建一个Activity时默认会自动在AndroidManifest文件中自动注册,如果没有自动注册的话,我们就需要自动手动去注册,不注册,将导致程序运行出现异常,下面看一下注册内容:
这个是主Activity的注册信息,加上了
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
表示当前Activity是主Activity,点击应用图标,就会启动这个Activity。
1.标题栏的隐藏:
在setContentView()的前面加上一句requestWindowFeature(Window.FEATURE_NO_TITLE);
2.Activity中使用menu:
以代码的方式添加menu:
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE,1,0,"开始"); menu.add(Menu.NONE,2,1,"结束"); return true; }
add(int groupId, int itemId, int order, CharSequence title)
groupId:表示组别,如果部分在就写Menu.NONE;
itemId:用来确定不同的菜单,区别item;
order:item的排放的先后顺序;
title:item显示的文字内容;
布局方式添加Menu:
新建Menu资源文件夹:res-->New-->Android resource directory:
确认之后,在res/menu/新建 Menu resource file :
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/first" android:title="first" /> <item android:id="@+id/second" android:title="second"/> </menu>
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_item,menu); return true; } }
最后显示:
后面会写再写博客详细介绍Menu
3.Activity的销毁:
除了按下Back键可以销毁一个Activity之外,还可以调用finish()方法,直接销毁。
4.Intent:
1)显示Intent的使用:
AActivity调往BActivity:
Intent intent = new Intent(AActivity.this,BActivity.class);
startActivity(intent);
5.Intent返回数据给上一个Activity:
startActivityForResult(intent,1); ---FirstActivity
setResult(RESULT_OK,intent); ----secondActivity
onActivtiyResult(int requestCode, int resultCode, intent data); ---FirstActivity
第一个Activity
private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); Button btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(this); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case 1: if (resultCode == RESULT_OK){ tv.setText(data.getStringExtra("data")); } } }
第二个Activity:
@Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("data","hello MainActivity"); setResult(RESULT_OK,intent); super.onBackPressed(); }
切记第二个Activity中的setResult的内容下载supr的前面。
6、Activity的各种生命周期
1)Activity创建时:onCreate()-->onStart()-->onResume()
2) 按下HOME键:onPause()-->onStop();
3) 再重新回到Activity:onRestart()-->onStart()-->onResume();
4) 按下Back键: onPause()-->onStop()-->onDestory();
5) 按下Back键返回上一个Activity时:(B)onPause()-->(A)onRestart()-->(A)onStart()-->(A)onResume()-->(B)onStop()-->(B)onDestory();
6) A跳转到B时: (A)onPause()-->(B)onCreate()-->(B)onStart()-->(B)onResume()-->(如果B不是透明的,A就不执行onStop()方法);
当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变
7、Activity的回收与数据恢复:
在默认的Activity启动模式下,Activity会不断创建和被回收,可能会导致数据的丢失,所以Activity提供了回调方法onSaveInstanceState(),这个方法会携带一个Bundle参数,把你想要保存的值放在Bundle中,然后在onCreate()方法中也有Bundle参数,用来取出数据。
8、Activity的四种启动模式:
standard、singleTop、singleTask、singleInstance
1) standard :每启动一个新的Activity,都会在返回栈中入栈,并处于栈顶的位置;
2) singleTop:在启动Activity时,如果返回发现返回栈的栈顶已经是该Activity,则直接使用当前Activity,不会创建新的Activity;
3) singleTask:每次启动Activity的时候,系统首先会在返回栈中检查是否存在该Activity,如果已经存在,则直接使用该实例,把这个Activity之上的所有Activity全部出栈,如果没有发现,会创建一个新的实例。
4) singleInstance:活动会启动一个新的返回栈来管理这个Activity;应用场景:当想把一个Activity给自己的应用和其他应用使用的时候;
9、随时退出程序:
public class ActivityCollector { /** Activity的集合 */ public static List<Activity> activities = new ArrayList<>(); /** * 添加Activity到集合,写在Activity的onCreate()方法里 * @param activity 要添加的Activity */ public static void addActivity(Activity activity){ activities.add(activity); } /** * 移除指定的Activity * @param activity 要移除的Activity */ public static void removeActivity(Activity activity){ activities.remove(activity); } /** * 销毁集合中所有的Activity */ public static void finishAll(){ for (Activity activity:activities){ if (!activity.isFinishing()){ activity.finish(); } } } }