關(guān)于android連續(xù)點(diǎn)擊出現(xiàn)多個(gè)Activity界面的解決方法
前言
開始始學(xué)習(xí)android,對(duì)android的啟動(dòng)模式?jīng)]有什么了解,就使用了時(shí)間判斷是否重復(fù)點(diǎn)擊了兩次按鈕,啟動(dòng)另外的activity界面,這樣的控制方法,有時(shí)候會(huì)失效,比如,兩秒鐘還未啟動(dòng)另外的activity,那么又可以重復(fù)點(diǎn)擊。所以,就調(diào)整為android的啟動(dòng)模式來控制重復(fù)出現(xiàn)多個(gè)acitvity。
一、通過時(shí)間控制點(diǎn)擊次數(shù):
這種方式對(duì)應(yīng)控制網(wǎng)絡(luò)請(qǐng)求不錯(cuò)。
public class NoDoubleClickUtil { private static long lastClickTime; private final static int SPACE_TIME =2000; public static void initLastClickTime() { lastClickTime = 0; } public synchronized static boolean isDoubleClick() { long currentTime = System.currentTimeMillis(); boolean isClickDouble; if (currentTime - lastClickTime > SPACE_TIME) { isClickDouble = false; } else { isClickDouble = true; } lastClickTime = currentTime; return isClickDouble; } }
二、通過launchMode啟動(dòng)模式控制出現(xiàn)多個(gè)activity的方式:
這種方式真正意義上杜絕了同時(shí)出現(xiàn)相同的多個(gè)activity。
<activity android:name=".InternetHospital.InternetHospitalInquiryCallUI"
android:launchMode="singleInstance"/>
或者在代碼中設(shè)置:
Intent intent = new Intent(); intent.setClass(getApplicationContext(), TargetActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent);
三、android的四種啟動(dòng)模式:
1、standard模式:每次調(diào)用startActivity()啟動(dòng)時(shí)都會(huì)創(chuàng)建一個(gè)新的Activity放在棧頂(默認(rèn)都是這個(gè)模式)
2、singleTop模式:?jiǎn)?dòng)Activity時(shí),指定Activity不在棧頂就創(chuàng)建,如在棧頂,則不再創(chuàng)建(不會(huì)出現(xiàn)兩個(gè)相同的Activity相鄰)
3、singleTask模式:如果啟動(dòng)的Activity不存在就創(chuàng)建Activity,如果存在直接跳轉(zhuǎn)到指定的Activity所在位置(在其上面的Activity會(huì)被移出棧,也就是一個(gè)棧中不能有重復(fù)的Activity)
4、singleInstance模式:如果啟動(dòng)的Activity不存在就創(chuàng)建一個(gè)Activity同時(shí)創(chuàng)建一個(gè)棧,如果存在就將指定的Activity存在的棧移動(dòng)到棧頂(表示這個(gè)Activity只能存在于一個(gè)獨(dú)立的任務(wù)棧中,同應(yīng)用的其它Activity與其無(wú)關(guān))
補(bǔ)充知識(shí):Android中退出多個(gè)Activity的兩個(gè)經(jīng)典方法
一種把每個(gè)activity用集合記住,然后逐一干掉;另一種思路是使用廣播。
方法一、用list保存activity實(shí)例,然后逐一干掉
創(chuàng)建一個(gè)外部類繼承Application用來存放activity
public class MyActvity extends Application { //創(chuàng)建一個(gè)集合,用來存放activity的對(duì)象 ArrayList<Activity>list=new ArrayList<>(); //聲明一個(gè)本類的對(duì)象 private static MyActvity instance; public MyActvity() { } //創(chuàng)建一個(gè)方法,用來初始化MyActivity的對(duì)象,并且初始化的對(duì)像的返回 public synchronized static MyActvity getInstance(){ if (instance==null){ instance=new MyActvity(); } return instance; } //調(diào)用此方法用來向集合當(dāng)中添加activity對(duì)象 public void addActivity(Activity activity){ list.add(activity); } //判斷activity是否已經(jīng)在集合當(dāng)中 public boolean isexitlist(Activity activity){ if (list.contains(activity)){ return true; } return false; } //當(dāng)調(diào)用此方法的時(shí)候,關(guān)閉所有的activity public void exit(){ for (Activity activity:list){ activity.finish(); } //退出當(dāng)前的MyActivity System.exit(0); } @Override public void onLowMemory() { super.onLowMemory(); //當(dāng)系統(tǒng)的存儲(chǔ)空間不夠的時(shí)候,調(diào)用系統(tǒng)的垃圾回收期,清理里面的垃圾 System.gc(); } }
Activity1代碼:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //調(diào)用存放activity類 MyActvity instance = MyActvity.getInstance(); //判斷存放activity類是否存放該activity,不存在加入類 if (!instance.isexitlist(this)){ instance.addActivity(this); } Intent intent = new Intent(this, Main2Activity.class); startActivity(intent); } }
Activity2代碼:
public class Main2Activity extends Activity { private MyActvity instance; /** * Called when the activity is first created. */ @Override+ super.onCreate(savedInstanceState); setContentView(R.layout.sdfa); Button bt= (Button) findViewById(R.id.bt); instance = MyActvity.getInstance(); if (!instance.isexitlist(this)){ instance.addActivity(this); } bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //調(diào)用exit()方法銷毀里面所有activity instance.exit(); } }); } }
方法二、使用廣播在activity里注冊(cè)廣播,銷毀時(shí)啟動(dòng)廣播
MainActivity里注冊(cè)廣播:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this, Main2Activity.class); startActivity(intent); //注冊(cè)廣播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Define.PAHNAME); registerReceiver(new MyReceiver(),intentFilter); } class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { unregisterReceiver(this); ((Activity)context).finish(); } } }
activity2:?jiǎn)?dòng)廣播
public class Main2Activity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sdfa); Button bt= (Button) findViewById(R.id.bt); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Define.PAHNAME); sendBroadcast(intent); finish(); } }); } }
以上這篇關(guān)于android連續(xù)點(diǎn)擊出現(xiàn)多個(gè)Activity界面的解決方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Android點(diǎn)擊事件之多點(diǎn)觸摸與手勢(shì)識(shí)別的實(shí)現(xiàn)
- Android開發(fā)返回鍵明暗點(diǎn)擊效果的實(shí)例代碼
- Android實(shí)現(xiàn)自動(dòng)點(diǎn)擊無(wú)障礙服務(wù)功能的實(shí)例代碼
- Android自定義SeekBar實(shí)現(xiàn)滑動(dòng)驗(yàn)證且不可點(diǎn)擊
- android實(shí)現(xiàn)點(diǎn)擊按鈕控制圖片切換
- Android實(shí)現(xiàn)點(diǎn)擊某個(gè)按鈕指定位置彈出布局
- Android實(shí)現(xiàn)圖片點(diǎn)擊放大
- android實(shí)現(xiàn)點(diǎn)擊圖片全屏展示效果
- Android Button按鈕點(diǎn)擊背景和文字變化操作
- Android Studio finish()方法的使用與解決app點(diǎn)擊“返回”(直接退出)
- Android實(shí)現(xiàn)WebView點(diǎn)擊攔截跳轉(zhuǎn)原生
- Android擴(kuò)大View點(diǎn)擊范圍的方法
相關(guān)文章
Android客戶端實(shí)現(xiàn)注冊(cè)、登錄詳解(2)
這篇文章主要為大家詳細(xì)介紹了Android客戶端實(shí)現(xiàn)注冊(cè)、登錄代碼第二篇,App與服務(wù)器的交互實(shí)現(xiàn)登錄和自動(dòng)登錄功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Flutter利用SizeTransition實(shí)現(xiàn)組件飛入效果
本文將為大家介紹SizeTransition,SizeTransition用于更改子組件的尺寸來實(shí)現(xiàn)動(dòng)畫,支持垂直方向或水平方向修改動(dòng)畫。本文將利用其實(shí)現(xiàn)組件飛入效果,需要的可以參考一下2022-04-04Android實(shí)現(xiàn)局部圖片滑動(dòng)指引效果示例
現(xiàn)在滑動(dòng)效果用的比較多,尤其是在手機(jī)端上面,本文介紹了Android實(shí)現(xiàn)局部圖片滑動(dòng)指引效果示例,現(xiàn)在就分享給大家,也給大家做個(gè)參考。2016-10-10利用kotlin實(shí)現(xiàn)統(tǒng)計(jì)文件字符個(gè)數(shù)的方法示例
最近在學(xué)習(xí)kotlin,發(fā)現(xiàn)了一些不錯(cuò)的小技巧,所以下面這篇文章主要給大家介紹了關(guān)于利用kotlin實(shí)現(xiàn)統(tǒng)計(jì)文件字符個(gè)數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12Android中button實(shí)現(xiàn)onclicklistener事件的兩種方式
本文介紹下Android中button實(shí)現(xiàn)onclicklistener事件的兩種方法,感興趣的朋友可以參考下2013-04-04關(guān)于Android中ListView嵌套GridView的問題
在Android開發(fā)的過程中可能需要用到listview嵌套gridview的場(chǎng)景,但是在嵌套過程中也許會(huì)遇到問題,我們下面一起來看看是什么問題以及如何解決。2016-08-08Android手勢(shì)控制實(shí)現(xiàn)縮放、移動(dòng)圖片
這篇文章主要為大家詳細(xì)介紹了Android手勢(shì)控制實(shí)現(xiàn)縮放、移動(dòng)圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02Android 開發(fā)仿簡(jiǎn)書登錄框可刪除內(nèi)容或顯示密碼框的內(nèi)容
本文通過實(shí)例代碼給大家分享android開發(fā)中模仿簡(jiǎn)書登錄框可刪除內(nèi)容或顯示密碼框的內(nèi)容,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2016-12-12