文章出處

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

 

 

  

 

 

  

  

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()