編輯:關於Android編程
先看一下singleInstance啟動模式的說明:
只有一個實例,並且這個實例獨立運行在一個activity任務棧中,這個task只有這個實例,不允許有別的Activity存在下面我們通過一個實例來了解singleInstance啟動模式
在手機上的運行結果如下圖
layout布局文件為
<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"><button android:id="@+id/button1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Activity1"></button><button android:id="@+id/button2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Activity2"></button><button android:id="@+id/button3" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Activity3"></button></linearlayout>
MainActivity(Activity1).class
package com.example.activitysingleinstance; 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 MainActivity extends Activity implements OnClickListener{ private Button btn_open1,btn_open2,btn_open3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle("Activity1"); //在日志中輸出棧ID Log.d("SingleInstance", "Activity1的棧ID:"+getTaskId()+""); btn_open1=(Button) findViewById(R.id.button1); btn_open2=(Button) findViewById(R.id.button2); btn_open3=(Button) findViewById(R.id.button3); btn_open1.setOnClickListener(this); btn_open2.setOnClickListener(this); btn_open3.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.button1: startActivity(new Intent(this,MainActivity.class)); break; case R.id.button2: startActivity(new Intent(this,Activity2.class)); break; case R.id.button3: startActivity(new Intent(this,Activity3.class)); break; } } }
package com.example.activitysingleinstance; 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 Activity2 extends Activity implements OnClickListener{ private Button btn_open1,btn_open2,btn_open3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle("Activity2"); //在日志中輸出棧ID Log.d("SingleInstance", "Activity2的棧ID:"+getTaskId()+""); btn_open1=(Button) findViewById(R.id.button1); btn_open2=(Button) findViewById(R.id.button2); btn_open3=(Button) findViewById(R.id.button3); btn_open1.setOnClickListener(this); btn_open2.setOnClickListener(this); btn_open3.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.button1: startActivity(new Intent(this,MainActivity.class)); break; case R.id.button2: startActivity(new Intent(this,Activity2.class)); break; case R.id.button3: startActivity(new Intent(this,Activity3.class)); break; } } //如果調用這個方法就在日志中輸出信息 @Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub super.onNewIntent(intent); Log.d("SingleInstance", "Activity2調用onNewIntent"); } }Activity3.class
package com.example.activitysingleinstance; 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 Activity3 extends Activity implements OnClickListener{ private Button btn_open1,btn_open2,btn_open3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle("Activity3"); //在日志中輸出棧ID Log.d("SingleInstance", "Activity3的棧ID:"+getTaskId()+""); btn_open1=(Button) findViewById(R.id.button1); btn_open2=(Button) findViewById(R.id.button2); btn_open3=(Button) findViewById(R.id.button3); btn_open1.setOnClickListener(this); btn_open2.setOnClickListener(this); btn_open3.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.button1: startActivity(new Intent(this,MainActivity.class)); break; case R.id.button2: startActivity(new Intent(this,Activity2.class)); break; case R.id.button3: startActivity(new Intent(this,Activity3.class)); break; } } }最後不要忘記在AndroidManifest.xml中配置Activity2和Activity3的信息
<activity android:launchmode="singleInstance" android:name="com.example.activitysingleinstance.Activity2"></activity> <activity android:name="com.example.activitysingleinstance.Activity3"></activity>現在我們把它部署到手機上。
按照這個打開順序。
Activity1->Activity2->Activity3->Activity1->Activity2
我們看看在日志中的輸出情況
分析:啟動Activity1,創建一個Activity棧,ID=17.然後打開Activity2,因為Activity2為SingleInstance啟動模式,這個實例要獨自運行在一個棧中,我們會發現Activity2又新建了一個Activity棧,ID=18.然後再打開Activity3,進入ID=17的棧中,再打開Activity1繼續進入ID=17的棧中。我們再次打開Activity2發現已經棧中已經有了Activity2的實例,不會創建新的實例,但會調用其onNewIntent方法。
具體棧的情況如下圖
需要按幾次返回能回到主界面呢?聰明的你知道了把~那你也就理解了singleInstance啟動模式
·4次~
小米手機如何快速截屏:在這裡總結了兩種小米手機快速截屏的方法,不知道或者要用的童鞋還不快點收藏起來試試看!1、下拉通知欄,點擊截屏,2秒後直接進入截屏截取當
ScrollView添加提示Arrow(箭頭) 在ScrollView的滑動功能中,需要給用戶提示,可以滑動,可以添加兩個箭頭。
騰訊已將手機QQ桌面帶到了安卓手機平台。該版本不僅能關注城市天氣和資訊熱點,還能在桌面就收發QQ消息、定制動態的待機桌面。本期就來看看新版手機QQ桌面是如何
Android-ListView兩種適配器ListView在安卓App中非常常見,幾乎每一個App都會有涉及,比如QQ消息列表,或者是通訊錄還有就是酷我音樂的歌曲列表都是