新建一個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(); } } } }
文章列表