編輯:關於Android編程
先看一下singleTop啟動模式的說明:
可以有多個實例,但是不允許此Activity的多個實例疊加。即,如果此Activity有實例在棧頂的時候,啟動這個Activity,不會創建新的實例而會調用其OnNewIntent方法,如果不在棧頂則創建新的實例
下面我們通過一個實例來仔細了解
這是在手機上的效果
首先是xml布局文件,共兩個按鈕
MainActivity.class
package com.example.singletop; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener{ private Button btn_open1,btn_open2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //設置標題為Activity1 setTitle("我是Activity1"); btn_open1=(Button) findViewById(R.id.button1); btn_open2=(Button) findViewById(R.id.button2); btn_open1.setOnClickListener(this); btn_open2.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.button1: startActivity(new Intent(MainActivity.this,MainActivity.class)); break; case R.id.button2: startActivity(new Intent(MainActivity.this,OtherActivity.class)); break; } } }OtherActivity.class
package com.example.singletop; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class OtherActivity extends Activity implements OnClickListener{ private Button btn_open1,btn_open2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //設置標題為Activity2 setTitle("我是Activity2"); btn_open1=(Button) findViewById(R.id.button1); btn_open2=(Button) findViewById(R.id.button2); btn_open1.setOnClickListener(this); btn_open2.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.button1: startActivity(new Intent(OtherActivity.this,MainActivity.class)); break; case R.id.button2: startActivity(new Intent(OtherActivity.this,OtherActivity.class)); break; } } //在此方法中打印是否調用這個方法的日志 @Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub super.onNewIntent(intent); Log.d("OtherActivity", "OnNewIntent"); } }
MainActivity是standard啟動模式
OtherActivity是singleTop啟動模式
在AndroidManifest.xml中MainActivity默認就是standard啟動模式
配置一下OtherActivity就好
<activity android:name="com.example.singletop.OtherActivity" android:launchmode="singleTop"></activity>我們舉幾個例子。
Activity1->Activity2->Activity1->Activity2
我們做完這些 在棧中的情況是
然後我們看看日志信息 為空 說明並沒有調用onNewIntent方法,因為我們在創建啟動模式為singleTop的Activity2時Activity2不在棧頂。需要按四次返回才能返回到主界面。
2.Activity1->Activity2->Activity2->Activity2
這個時候棧裡面的情況是什麼樣的呢?
沒錯 就是這樣的 。為什麼呢?因為我們在創建第三個Activity2時,因為Activity2為singleTop的啟動模式,發現此時有在第二個創建的Activity2為棧頂,所以不會創建新的實例而會調用其OnNewIntent方法。創建第四個Activity2也是同樣的道理。這時候我們只需要按兩次返回鍵就能返回到主界面。下面看看日志信息
看到這裡的小伙伴的你,懂了這種啟動模式了嗎?
在加深一下印象吧~
singleTop啟動模式的說明:
可以有多個實例,但是不允許此Activity的多個實例疊加。即,如果此Activity有實例在棧頂的時候,啟動這個Activity,不會創建新的實例而會調用其OnNewIntent方法,如果不在棧頂則創建新的實例
1. Java知識儲備本知識點不做重點講解:對於有基礎的同學推薦看《Java編程思想》,鞏固基礎,查漏補全,了解並熟悉更多細節知識點。對於沒有基礎的同學推薦看一本Java
本文實例講述了Android控件之GridView用法。分享給大家供大家參考。具體如下:GridView是一項顯示二維的viewgroup,可滾動的網格。一般用來顯示多張
Android通訊錄管理(獲取聯系人、通話記錄、短信消息) 2014年2月26日 通訊錄開發研究學習 前言:前陣子主要是記錄了如何對聯系人的一些操作,比如搜索,全
在國內屏蔽了許多外國網站,連google 和android都屏蔽了,做程序員的就苦了!不過車到山前必有路,我們也有我們的辦法!首先要先進去google等的一系列網站,那麼