中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于android連續點擊出現多個Activity界面的解決方法

發布時間:2020-09-26 16:46:43 來源:腳本之家 閱讀:256 作者:sapodilla 欄目:移動開發

前言

開始始學習android,對android的啟動模式沒有什么了解,就使用了時間判斷是否重復點擊了兩次按鈕,啟動另外的activity界面,這樣的控制方法,有時候會失效,比如,兩秒鐘還未啟動另外的activity,那么又可以重復點擊。所以,就調整為android的啟動模式來控制重復出現多個acitvity。

一、通過時間控制點擊次數:

這種方式對應控制網絡請求不錯。

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啟動模式控制出現多個activity的方式:

這種方式真正意義上杜絕了同時出現相同的多個activity。

<activity android:name=".InternetHospital.InternetHospitalInquiryCallUI"
android:launchMode="singleInstance"/>

或者在代碼中設置:

Intent intent = new Intent();
intent.setClass(getApplicationContext(), TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

三、android的四種啟動模式:

1、standard模式:每次調用startActivity()啟動時都會創建一個新的Activity放在棧頂(默認都是這個模式)

2、singleTop模式:啟動Activity時,指定Activity不在棧頂就創建,如在棧頂,則不再創建(不會出現兩個相同的Activity相鄰)

3、singleTask模式:如果啟動的Activity不存在就創建Activity,如果存在直接跳轉到指定的Activity所在位置(在其上面的Activity會被移出棧,也就是一個棧中不能有重復的Activity)

4、singleInstance模式:如果啟動的Activity不存在就創建一個Activity同時創建一個棧,如果存在就將指定的Activity存在的棧移動到棧頂(表示這個Activity只能存在于一個獨立的任務棧中,同應用的其它Activity與其無關)

補充知識:Android中退出多個Activity的兩個經典方法

一種把每個activity用集合記住,然后逐一干掉;另一種思路是使用廣播。

方法一、用list保存activity實例,然后逐一干掉

創建一個外部類繼承Application用來存放activity

public class MyActvity extends Application {
  //創建一個集合,用來存放activity的對象
  ArrayList<Activity>list=new ArrayList<>();
  //聲明一個本類的對象
  private static MyActvity instance;
  public MyActvity() {
  }
  //創建一個方法,用來初始化MyActivity的對象,并且初始化的對像的返回
  public synchronized static MyActvity getInstance(){
    if (instance==null){
      instance=new MyActvity();
    }
    return instance;
  }
  //調用此方法用來向集合當中添加activity對象
  public void addActivity(Activity activity){
    list.add(activity);
  }
  //判斷activity是否已經在集合當中
  public boolean isexitlist(Activity activity){
    if (list.contains(activity)){
      return true;
    }
    return false;
  }
  //當調用此方法的時候,關閉所有的activity
  public void exit(){
    for (Activity activity:list){
      activity.finish();
    }
    //退出當前的MyActivity
    System.exit(0);
  }

  @Override
  public void onLowMemory() {
    super.onLowMemory();
    //當系統的存儲空間不夠的時候,調用系統的垃圾回收期,清理里面的垃圾
    System.gc();
  }
}

Activity1代碼:

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //調用存放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) {
      //調用exit()方法銷毀里面所有activity
        instance.exit();
      }
    });

  }
}

方法二、使用廣播在activity里注冊廣播,銷毀時啟動廣播

MainActivity里注冊廣播:

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);
    //注冊廣播
    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:啟動廣播

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();
      }
    });

  }
}

以上這篇關于android連續點擊出現多個Activity界面的解決方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

集安市| 云霄县| 皮山县| 呼和浩特市| 邢台市| 黔东| 贵港市| 旬阳县| 同心县| 德保县| 莆田市| 西藏| 津市市| 法库县| 巴东县| 定襄县| 延长县| 奎屯市| 黄浦区| 湖南省| 石渠县| 手机| 虹口区| 山东省| 贵阳市| 美姑县| 石河子市| 板桥市| 盐亭县| 德保县| 海安县| 五寨县| 盐津县| 临武县| 泰宁县| 定襄县| 山丹县| 建德市| 美姑县| 辽阳县| 电白县|