안 드 로 이 드 연속 클릭 에 여러 개의 Activity 인터페이스 가 나타 나 는 해결 방법
안 드 로 이 드 를 배우 기 시 작 했 습 니 다.안 드 로 이 드 의 시작 모델 에 대해 아무것도 모 르 고 시간 을 사용 하여 두 번 의 단 추 를 중복 클릭 했 는 지 여 부 를 판단 하고 다른 activity 인터페이스 를 시작 합 니 다.이런 제어 방법 은 가끔 효력 을 잃 을 수 있 습 니 다.예 를 들 어 2 초 동안 다른 activity 를 시작 하지 않 으 면 중복 클릭 할 수 있 습 니 다.따라서 안 드 로 이 드 의 시작 모드 로 조정 하여 여러 개의 acitivity 가 반복 되 는 것 을 제어 합 니 다.
1.시간 을 통 해 클릭 횟수 조절:
이런 방식 은 제어 네트워크 요청 에 대응 하 는 것 이 좋다.
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;
}
}
2.launchMode 시작 모드 를 통 해 여러 activity 가 나타 나 는 방식 을 제어 합 니 다.이런 방식 은 진정한 의미 에서 같은 여러 개의 activity 가 동시에 나타 나 는 것 을 근절 했다.
또는 코드 에 설정:
Intent intent = new Intent();
intent.setClass(getApplicationContext(), TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
3.안 드 로 이 드 의 네 가지 시작 모드: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 를 집합 으로 기억 하고 하나씩 제거 합 니 다.또 다른 사고방식 은 방송 을 사용 하 는 것 이다.
방법 1.list 로 activity 인 스 턴 스 를 저장 한 다음 하나씩 제거 합 니 다.
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();
}
});
}
}
방법 2.방송 을 이용 하여 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();
}
});
}
}
안 드 로 이 드 가 연속 클릭 하여 여러 개의 Activity 인터페이스 가 나타 나 는 해결 방법 은 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.