繁体   English   中英

如何完成android应用程序?

[英]How to finish an android application?

我需要完成一个android应用程序。 为此,我写道

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Are you sure You want to exit")
        .setCancelable(false)
        .setPositiveButton("YES"),
        new DialogInterface.OnClickListener() {
            // On
            // clicking
            // "Yes"
            // button

            public void onClick(DialogInterface dialog,int id) {
                System.out.println(" onClick ");
                closeApplication(); // Close Application method called
            }
        })
        .setNegativeButton("NO"),
        new DialogInterface.OnClickListener() {
            // On
            // clicking
            // "No"
            // button
            public void onClick(DialogInterface dialog,int id) {
                dialog.cancel();
            }
        });

        AlertDialog alert = builder.create();
        alert.show();
    }

    private void closeApplication() {
        System.out.println("closeApplication ");
        this.finish();
    }
}

但是,如果应用程序中没有完成任何活动,则当我尝试退出该应用程序时,该活动首先完成并且该应用程序没有退出..我尝试了2次退出此应用程序...我如何完成所有活动我需要退出时的应用程序...或者有什么方法可以完成整个应用程序

要关闭应用程序,只需调用:

android.os.Process.killProcess(android.os.Process.myPid());

否则,由于Android活动的特定生命周期,您不能确保该应用程序已关闭/被杀死。

每当您开始新活动时

myintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myintent);

并在清单文件中提及该活动为

<activity android:name=".<Activity Name>" >
        <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
     <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
       </activity>

将其放入您的onClickonBackPressed

moveTaskToBack(true);
finish()

请先阅读Google Android Developer Advocate Reto Meier的这篇文章: 何时在Android Apps中添加退出按钮(提示:从不)

什么是要添加退出按钮的症状? 如果您需要清除活动堆栈并始终以特定的活动重新启动,则可能只需要使用以下属性调整活动清单声明即可: android:clearTaskOnLaunch

Android的制作方式使得几乎没有打开过的应用程序被关闭。

在误解该语句之前,请先理解这一点。

“每当您退出应用程序时,Android都会保存应用程序正在做的所有事情(称为其状态),并在后台将其推送到应用程序中,并调用onStop()方法。这是应用程序的新状态,此时该应用程序就是不会运行,但也不会从内存中清除。每当您再次启动应用程序时,它就会从冻结状态恢复。只有当保留冻结应用程序的内存开始变满时,Android GC才会清除应用”。

因此,从概念上讲,没有任何问题。 当您在第一个活动中点击“返回”按钮时,Android会将应用程序和数据捆绑在一起并冻结。

我有一个带有多个活动的应用程序。 我扩展了Application类,并包含了一个变量numActive。 初始化为0。在每个活动的onStart()中,numActive递增,在onStop()中,递减。 如果计数达到零,则用户完全离开了我的应用程序,并且我关闭了后台任务。

我发现NeTeInStEiN答案的无耻复制非常有用(请对他的答案进行投票): 以编程方式将正在运行的应用程序发送到后台

您可以使用以下任一方法:

boolean sentAppToBackground = moveTaskToBack(true);

if(!sentAppToBackground){
  Intent i = new Intent();
  i.setAction(Intent.ACTION_MAIN);
  i.addCategory(Intent.CATEGORY_HOME);
  this.startActivity(i);
}

此处的更多信息: http : //developer.android.com/reference/android/app/Activity.html#moveTaskToBack(boolean)

或者简单地:

Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
this.startActivity(i);

Android Framework工程师Romain Guy表示:“您无法模拟Home键上的按下。” 所以要当心...

检查: http : //osdir.com/ml/Android-Developers/2010-03/msg01887.html

根据以下内容更新了此答案: moveTaskToBack(true)始终返回false

根据这个答案

只需编写this.finishAffinity(); 并做了!

要关闭应用程序,您也可以将“ System.exit(0)”设为标准0或使用任何退出代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM