응용 프로그램을 종료하고 홈 화면을 표시하는 방법은 무엇입니까?
홈페이지에 응용 프로그램을 탐색하는 버튼이있는 응용 프로그램이 있습니다.해당 페이지에는 클릭하면 응용 프로그램 아이콘이있는 전화기의 홈 화면으로 이동해야하는 "종료"버튼이 있습니다.어떻게해야합니까?
Android의 디자인은 선택에 따라 응용 프로그램을 종료하는 것이 아니라 OS에서 관리하는 것입니다. 해당 의도로 홈 애플리케이션을 불러올 수 있습니다.
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
이 같은 것을 시도 할 수 있습니다응용 프로그램에서 많은 활동 (예 : 10)이 있고이 활동에서 직접 종료해야한다고 가정합니다. 우리가 할 수있는 일은 인 텐트를 만들고 루트 활동으로 이동하여 인 텐트에 플래그를 설정하는 것입니다.
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
또한 의도에 부울과 같은 것을 추가하십시오.
intent.putExtra("EXIT", true);
그런 다음 루트 활동에서 가치 확인
boolean
에서) 그 콜 완료 (에 따른
onCreate()
루트 활동
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
System.exit(0);
아마 당신이 찾고있는 것입니다. 전체 응용 프로그램을 닫고 홈 화면으로 이동합니다.
이것은 나를 위해 잘 작동합니다.
다음과 같이 이전의 모든 활동을 닫으십시오.
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("Exit me", true);
startActivity(intent);
finish();
그런 다음 MainActivity onCreate () 메소드에서 이것을 추가하여 MainActivity를 완료하십시오.
setContentView(R.layout.main_layout);
if( getIntent().getBooleanExtra("Exit me", false)){
finish();
return; // add this to prevent from doing unnecessary stuffs
}
먼저 방법을 사용하여 신청서를 작성하십시오.
finish();
그런 다음 강제 제거를 위해 onDestroy에 아래 줄을 추가하십시오.
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
활동을 끝내려면 간단히 전화하면
finish()
됩니다. 그러나 화면에 종료 버튼이있는 것은 좋지 않습니다.
Android 애플리케이션을 종료하지 않는 것이 좋습니다. 자세한 내용은이
을 참조하십시오.사용자는 항상 홈 버튼을 통해 또는 첫 번째 활동에서 뒤로 버튼을 통해 앱을 종료 할 수 있습니다.
일부 활동은 실제로 스플래시 화면 활동, 시작 화면 활동, 확인 창과 같이 뒤로 버튼을 눌렀을 때 다시 열지 않으려 고합니다. 실제로 활동 스택에서는 이것을 필요로하지 않습니다. => manifest.xml 파일을 열고 속성을 추가 하여이 작업을 수행 할 수 있습니다
android : noHistory = "true"
이러한 활동에.
<activity
android:name="com.example.shoppingapp.AddNewItems"
android:label=""
android:noHistory="true">
</activity>
또는 때로는 특정 뒤로 버튼 누름으로 전체 응용 프로그램을 닫고 싶을 때가 있습니다. 여기서 모범 사례는 응용 프로그램을 종료하는 대신 홈 창을 여는 것입니다. 이를 위해서는 onBackPressed () 메소드를 대체해야합니다. 일반적으로이 방법은 스택에서 최상위 활동을 엽니 다.
@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
또는뒤로 버튼을 누르면 해당 활동을 종료하고 활동 스택에 추가하지 않으려 고합니다. onBackPressed () 메소드 내에서 finish () 메소드를 호출하십시오. 전체 응용 프로그램을 닫지 않습니다. 스택의 이전 활동으로 이동합니다.
@Override
public void onBackPressed() {
finish();
}
(이전 답변을 시도했지만 일부 포인트가 부족합니다. 예를 들어
return;
활동을 마친 후 활동 코드를 실행 하지 않으면 남은 활동 코드가 실행됩니다. 또한 리턴으로 onCreate를 편집해야합니다. super.onCreate ()를 실행하지 않으면 런타임 오류가 발생합니다)당신은 말
MainActivity
과
ChildActivity
.ChildActivity 내부에 다음을 추가하십시오.
Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;
MainActivity의 onCreate 내부에 다음을 추가하십시오.
@Override
public void onCreate(Bundle savedInstanceState) {
mContext = getApplicationContext();
super.onCreate(savedInstanceState);
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
return;
}
// your current codes
// your current codes
}
FinishAffinity 메서드를 사용하여 앱과 관련된 스택의 모든 작업을 닫는 또 다른 옵션이 있습니다. 참조 :
https://stackoverflow.com/a/27765687/1984636
u 호출이 완료되면 해당 활동의 onDestroy ()가 호출되고 활동 스택의 이전 활동으로 돌아갑니다 ... 그래서 종료를 위해 finish ()를 호출하지 마십시오.
내가 한 일은 다음과 같습니다.
SomeActivity.java
@Override
public void onBackPressed() {
Intent newIntent = new Intent(this,QuitAppActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(newIntent);
finish();
}
QuitAppActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
}
기본적으로 수행 한 작업은 스택에서 모든 활동을 지우고 시작
QuitAppActivity
하여 작업을 완료합니다.
이후 선 다음 추가
finish();
의
onDestroy()
:
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
다음 코드 스 니펫을 사용하여 응용 프로그램을 종료하려고했는데 이것이 효과적이었습니다. 이것이 도움이되기를 바랍니다. 나는 2 가지 활동으로 작은 데모를했습니다.첫 활동
public class MainActivity extends Activity implements OnClickListener{
private Button secondActivityBtn;
private SharedPreferences pref;
private SharedPreferences.Editor editer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn);
secondActivityBtn.setOnClickListener(this);
pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
editer = pref.edit();
if(pref.getInt("exitApp", 0) == 1){
editer.putInt("exitApp", 0);
editer.commit();
finish();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.SecondActivityBtn:
Intent intent= new Intent(MainActivity.this, YourAnyActivity.class);
startActivity(intent);
break;
default:
break;
}
}
}
다른 활동
public class YourAnyActivity extends Activity implements OnClickListener {
private Button exitAppBtn;
private SharedPreferences pref;
private SharedPreferences.Editor editer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_any);
exitAppBtn = (Button) findViewById(R.id.exitAppBtn);
exitAppBtn.setOnClickListener(this);
pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
editer = pref.edit();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.exitAppBtn:
Intent main_intent = new Intent(YourAnyActivity.this,
MainActivity.class);
main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(main_intent);
editer.putInt("exitApp",1);
editer.commit();
break;
default:
break;
}
}
}
나는 관찰자 모드로 그것을했다.관찰자 인터페이스
public interface Observer {
public void update(Subject subject);
}
기본 주제
public class Subject {
private List<Observer> observers = new ArrayList<Observer>();
public void attach(Observer observer){
observers.add(observer);
}
public void detach(Observer observer){
observers.remove(observer);
}
protected void notifyObservers(){
for(Observer observer : observers){
observer.update(this);
}
}
}
Child Subject는 exit 메소드를 구현합니다.
public class ApplicationSubject extends Subject {
public void exit(){
notifyObservers();
}
}
응용 프로그램이 확장해야하는 MyApplication
public class MyApplication extends Application {
private static ApplicationSubject applicationSubject;
public ApplicationSubject getApplicationSubject() {
if(applicationSubject == null) applicationSubject = new ApplicationSubject();
return applicationSubject;
}
}기본 활동
public abstract class BaseActivity extends Activity implements Observer {
public MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
app = (MyApplication) this.getApplication();
app.getApplicationSubject().attach(this);
}
@Override
public void finish() {
// TODO Auto-generated method stub
app.getApplicationSubject().detach(this);
super.finish();
}
/**
* exit the app
*/
public void close() {
app.getApplicationSubject().exit();
};
@Override
public void update(Subject subject) {
// TODO Auto-generated method stub
this.finish();
}
}
테스트 해보자
public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
close(); //invoke 'close'
}
}
if you want to exit application put this code under your function
public void yourFunction()
{
finishAffinity();
moveTaskToBack(true);
}
//For an instance, if you want to exit an application on double click of a
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
// do something on back.
From Android 16+ you can use the following:
finishAffinity();
moveTaskToBack(true);
}
return super.onKeyDown(keyCode, event);
}
100% works fine. this is code for Exit your app onClick (Method)
Button exit = (Button)findViewById(R.id.exitbutton);
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
Toast.makeText(getApplicationContext(), "Closed Completely and Safely", Toast.LENGTH_LONG).show();
}
});
If you want to exit from your application. Then use this code inside your button pressed event. like:
public void onBackPressed()
{
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
'programing' 카테고리의 다른 글
중첩 된 목록에 대한 목록 이해? (0) | 2020.05.11 |
---|---|
vim에서 후행 공백을 자동으로 제거하는 방법 (0) | 2020.05.11 |
두 달의 NSDate (월 / 일 / 시간 / 분 / 초)의 차이점 (0) | 2020.05.11 |
sed를 사용하여 파일에서 첫 번째 항목 만 바꾸는 방법은 무엇입니까? (0) | 2020.05.11 |
HTML 파일 경로 위치와 관련하여“./”(점 슬래시) 란 무엇입니까? (0) | 2020.05.11 |