Androidの連続クリックについて、複数のActivityインターフェースが現れる解決方法について
前言
Androidの起動モードについてはよく分かりません。2回のボタンを繰り返しクリックしたかどうかを判断する時間を使って、別のactivityインターフェースを起動します。このような制御方法は時として無効になります。例えば、2秒はまだ他のactivityを起動していない場合、また繰り返しクリックすることができます。したがって、androidの起動モードに調整して、複数のacitvityが繰り返されることを制御します。
一、時間でクリック回数を制御する:
このような方法は制御ネットワーク要求に対応するのが良い。
このような方式は本当の意味で同時に同じ複数のactivityが現れることを根絶しました。
<activity android:name=「.Internet Hospita.Internet HospitalInquiryCallUI」
android:launchMode=「single Instance」/>
またはコードに設定します。
1、standardモード:startActivity()を起動するたびに新しいActivityをスタックトップに置く(デフォルトはこのモード)。
2、singleTopモード:Activityを起動する時、指定Activityはスタックの一番上にないと作成され、スタックの一番上にいると作成されなくなります。
3、singleTaskモード:起動されたActivityが存在しないならActivityを作成し、指定されたActivityの位置に直接ジャンプする場合(その上のActivityはスタックから取り除かれます。つまり、スタックの中に重複したActivityがありません。)
4、single Instanceモード:起動されたActivityが存在しない場合はActivityを作成して同時にスタックを作成し、存在する場合は指定されたActivityが存在するスタックをスタックトップに移動する(このActivityは一つの独立したタスクスタックにしか存在しないという意味で、同じアプリケーションの他のActivityは関係ない)
追加知識:Androidで複数のActivityを脱退する二つの古典的な方法
一つは各activityを集合で覚えて、一つずつ消します。もう一つの考えはラジオを使うことです。
方法一、activityの例をlistで保存して、それから一つ一つ消します。
外部クラス継承アプリを作成してactivityを保存します。
MainActivityに登録放送:
Androidの起動モードについてはよく分かりません。2回のボタンを繰り返しクリックしたかどうかを判断する時間を使って、別のactivityインターフェースを起動します。このような制御方法は時として無効になります。例えば、2秒はまだ他の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=「.Internet Hospita.Internet HospitalInquiryCallUI」
android:launchMode=「single Instance」/>
またはコードに設定します。
Intent intent = new Intent();
intent.setClass(getApplicationContext(), TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
三、androidの4つの起動モード:1、standardモード:startActivity()を起動するたびに新しいActivityをスタックトップに置く(デフォルトはこのモード)。
2、singleTopモード:Activityを起動する時、指定Activityはスタックの一番上にないと作成され、スタックの一番上にいると作成されなくなります。
3、singleTaskモード:起動されたActivityが存在しないならActivityを作成し、指定されたActivityの位置に直接ジャンプする場合(その上のActivityはスタックから取り除かれます。つまり、スタックの中に重複したActivityがありません。)
4、single Instanceモード:起動されたActivityが存在しない場合はActivityを作成して同時にスタックを作成し、存在する場合は指定されたActivityが存在するスタックをスタックトップに移動する(このActivityは一つの独立したタスクスタックにしか存在しないという意味で、同じアプリケーションの他のActivityは関係ない)
追加知識:Androidで複数のActivityを脱退する二つの古典的な方法
一つは各activityを集合で覚えて、一つずつ消します。もう一つの考えはラジオを使うことです。
方法一、activityの例をlistで保存して、それから一つ一つ消します。
外部クラス継承アプリを作成して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();
}
}
Activity 1コード:
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);
}
}
Activity 2コード:
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();
}
}
}
activity 2:放送を開始します。
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インターフェースが現れた解決方法は、小編集が皆さんに共有した内容の全てです。参考にしていただければ幸いです。どうぞよろしくお願いします。