애플리케이션을 종료하고 홈 화면을 표시하는 방법?
홈 페이지에 애플리케이션을 통한 탐색을 위한 버튼이 있는 애플리케이션이 있습니다.
그 페이지에는 "EX" 버튼이 있습니다.IT"를 클릭하면 사용자가 애플리케이션 아이콘이 있는 전화기의 홈 화면으로 이동합니다.
내가 어떻게 그럴 수 있을까?
안드로이드의 디자인은 애플리케이션을 선택적으로 종료하는 것을 선호하지 않고 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);
그런 다음 root activity에서 다음의 값을 확인합니다.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 on Create() 메서드에서 이를 추가하여 MainActivity를 마칩니다.
setContentView(R.layout.main_layout);
if( getIntent().getBooleanExtra("Exit me", false)){
finish();
return; // add this to prevent from doing unnecessary stuffs
}
먼저 방법을 사용하여 지원을 마칩니다.finish();
그런 다음 Destroy for Removing Force close의 아래 줄을 추가합니다.
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
활동을 종료하려면 간단히 전화를 걸 수 있습니다.finish(). 하지만 화면에 종료 버튼이 있는 것은 나쁜 관행입니다.
일부 활동은 실제로 뒤로 단추를 눌러 시작 화면 활동, 시작 화면 활동, 확인 창과 같은 활동을 다시 열지 않을 수 있습니다.사실 활동 스택에는 이런 것이 필요하지 않습니다.=> open manifest.xml 파일을 사용하여 이 작업을 수행하고 속성을 추가할 수 있습니다.
안드로이드:noHistory="true"
이러한 활동에 대하여.
<activity
android:name="com.example.shoppingapp.AddNewItems"
android:label=""
android:noHistory="true">
</activity>
오어
때로는 전체 응용프로그램을 특정 뒤로 버튼을 눌러 닫기를 원할 수도 있습니다.여기서는 애플리케이션을 종료하는 대신 홈 창을 여는 것이 가장 좋습니다.이 경우 BackPressed() 메서드를 재정의해야 합니다.일반적으로 이 방법은 스택의 상위 활동을 엽니다.
@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);
}
오어
뒤로 버튼을 눌러 해당 활동을 종료하고 BackPressed() 메서드의 내부에 있는 활동 스택.call finish() 메서드를 추가하지 않을 수도 있습니다.전체 응용프로그램을 닫지 않습니다.스택의 이전 활동에 대해 적용됩니다.
@Override
public void onBackPressed() {
finish();
}
Android 애플리케이션을 종료하지 않는 것이 좋습니다.자세한 내용은 이 질문을 참조하십시오.
사용자는 항상 홈 버튼을 통해 또는 뒤로 버튼을 통해 첫 번째 활동에서 앱을 종료할 수 있습니다.
(이전 답변을 시도해 보았지만 부족한 점이 있습니다.예를 들어, 만약 당신이 하지 않는다면.return;활동이 끝나면 남은 활동 코드가 실행됩니다.또한 Create with return 에서 편집해야 합니다.super.onCreate()를 실행하지 않으면 런타임 오류가 발생합니다.)
가지고 있다고 치자.MainActivity그리고.ChildActivity.
Inside Child Activity는 다음을 추가합니다.
Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;
만들기의 기본 활동 내부에서 다음을 추가합니다.
@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
해당 활동의 Destroy()에 대한 완료를 호출하면 해당 활동이 호출되고 활동 스택의 이전 활동으로 돌아갑니다.따라서.. 종료를 위해 finish()를 호출하지 마십시오.
제가 한 일은 이렇습니다.
일부 활동.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();
}
AppActivity.java 종료
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
}
기본적으로 당신이 한 일은 스택과 런치에서 모든 활동을 지웁니다.QuitAppActivity, 그 일은 끝납니다.
추가하시면 됩니다.moveTaskToBack(true)당신의 종료 버튼에onClickedListener적용을 최소화합니다.
도움이 되길 바랍니다.
다음 행 추가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);
}
}
}
하위 제목이 종료 방법을 구현합니다.
public class ApplicationSubject extends Subject {
public void exit(){
notifyObservers();
}
}
응용프로그램이 확장해야 하는 내 응용프로그램
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'
}
}
애플리케이션을 종료하려면 이 코드를 당신의 기능 아래에 놓습니다.
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%는 잘 작동합니다.클릭시 앱 종료(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();
}
});
어쩌면 내 코드가 도움이 될 수도 있습니다(Main_Activity.java):
@Override
protected void onDestroy() {
super.onDestroy();
this.finish();
exit(0);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_BACK:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("My application").setMessage("Keep playing?").setIcon(R.drawable.icon);
// Go to backgroung
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { moveTaskToBack(true); }
});
// Exit from app calling protected void onDestroy()
builder.setNegativeButton("CLOSE APPLICATION", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { onDestroy(); }
});
// Close this dialog
builder.setNeutralButton("CANCEL", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { dialog.cancel(); }
});
AlertDialog dialog = builder.create();
dialog.show();
return true;
}
return false;
}
이게 제일 쉬운 거예요.
finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
이렇게 하면 앱이 닫히고 메소드 서비스가 손상되지 않고 이 작업이 완료됩니다.
사용가능finish(); moveTaskToBack(true);그리고.System.exit(1);지원을 그만두기 위해서 입니다.
public void onBackPressed() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Exit Application?");
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
응용프로그램에서 종료하려면 다음과 같이 하십시오.그러면 버튼을 누른 이벤트 안에서 이 코드를 사용합니다.예:
public void onBackPressed()
{
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
언급URL : https://stackoverflow.com/questions/3226495/how-to-exit-from-the-application-and-show-the-home-screen
'programing' 카테고리의 다른 글
| x마일 반경 내의 다른 행에 대한 mySQL 경도 및 위도 쿼리 (0) | 2023.11.05 |
|---|---|
| 장고 1.7에서 초기 마이그레이션에서 다시 마이그레이션하는 방법은 무엇입니까? (0) | 2023.11.05 |
| 대용량 My ISAM 테이블의 안정성은 얼마나 안정적입니까? (0) | 2023.11.05 |
| llvm.bc 파일을 사람이 읽을 수 있는 .ll 파일로 변환하는 중 (0) | 2023.11.05 |
| 안드로이드와 오라클 데이터베이스를 연결하는 가장 좋은 방법은 무엇입니까? (0) | 2023.11.05 |