java - 我真的非常想要一个关闭按钮来终止 Android 应用程序

标签 java android

我想创建一个名为“忠诚卡”的非常简单的 Android 应用程序,以在电话屏幕上显示我的食品店的条形码图像。食品店收银台的条形码阅读器可以看到这张图片并认出我。我已经测试了这个概念,它似乎运作良好。

但是,因为我每周只去食品店,所以没有理由在扫描条形码后让应用程序在后台运行(甚至闲置)。在我 checkout 后结束、终止、消灭应用程序对我来说似乎是明智的。而且我认为合理的用户会看到使用“关闭”按钮来执行此操作的值(value)。

通过在应用程序 XML 中使用 onClick 并在 Java 方法中使用 finish(),我设法让关闭按钮从它所在的位置返回。 (我的意思是,如果应用程序是通过快捷方式从主屏幕启动的,那么我的关闭按钮会返回到主屏幕。如果应用程序是从应用程序抽屉启动的,则关闭按钮会返回到应用程序抽屉。)在无论哪种情况,应用程序列表仍然包含正在运行/空闲的应用程序。我真的,真的希望应用程序结束、停止、自毁,可以这么说。

在阅读该主题时,我认识到许多人认为这种使用按钮关闭应用程序的尝试不是好的做法。但是对于这种使用特定情况,用户可能不想再次提取条形码,直到下周他/她购买食物时。

  • 以我的拙见,我希望用户能够单击关闭按钮(一步)并让应用程序本身完全停止。

  • 另一种方法是让用户点击后退按钮(或主页),然后点击应用程序列表按钮,也许滚动到许多正在运行的其他正在运行的应用程序,然后右击以手动停止应用程序(四个步骤)。

我不了解你,但我通常有一长串正在运行的应用程序,看到一个额外的未使用的应用程序闲置是一种麻烦。特别是因为在这个用例中,用户可能不想在一周内再次看到该条形码。

话虽如此,我承认我是 Java 编程的新手,更不用说 Android 平台的编程了。 我想要一个关于如何重写下面显示的 Java 代码的建议,以便 closeIt 方法完全彻底地破坏自身和(我在这里猜测)主进程。

这是我根据搜索此主题编写的 Java 代码:

package com.example.loyaltycard;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    /* Close the application without leaving it in the activity list */
    public void closeIt (View view) {
        finish();
        return;
    }
}

与此 Java 代码一起使用的 XML 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.loyaltycard.MainActivity">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/barcodeimage" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal= "true"
        android:onClick="closeIt"
        android:text="Close" />
</RelativeLayout>

最后,提前感谢您允许我写一个又长又详细的问题。我希望我们可以避免讨论这是否是一种好的做法。相反,我想找到一个解决方案。我保证不仅会剪切/粘贴您的想法,还会研究您的建议为何有效。所以,你知道,我真的向你学习。

编辑:我使用 Android Studio 作为开发环境,我认为这可能会使事情复杂化。

最佳答案

  public void closeIt (View view) {
        //super.finish();
        finish();
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(1);
        return;
    }

更新:如果您有 10,20 个多个 Activity 正在运行并且您想要完成所有它们并退出系统。

application class中创建一个静态数组或 constants class.

常量

public class Constants {

public static ArrayList<Activity> activities = new ArrayList<Activity>();

}

MainActivity 在此数组中添加当前 Activity 引用

activity = MainActivity.this; Constants.activities.add(activity);

public class MainActivity extends Activity {

    private ImageView ImageButton;
    private Activity activity;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        activity = MainActivity.this;
        Constants.activities.add(activity);

        ImageButton = (ImageView) findViewById(R.id.camera);
        ImageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // existing app.
                if (Constants.activities != null) {
                    for (int i = 0; i < Constants.activities.size(); i++) {
                        Activity s = Constants.activities.get(i);
                        s.finish();
                    }
                }
                //super.finish();
                finish();
                android.os.Process.killProcess(android.os.Process.myPid());
                System.exit(1);
            }
        });
    }
}

关于java - 我真的非常想要一个关闭按钮来终止 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842962/

相关文章:

java - 从 ear/lib/jar 中的 ear/war 获取类返回 ClassNotFoundException

java - 有没有办法测量 Java (Servlet) I/O 流量?

android - ViewModel 在导航导航中没有被清除,并且 viewmodel 中的实时数据保持 Activity 状态

c# - Xamarin 波斯语日期选择器

java - 如何使用 AndroidPlot 在 Lollipop 上正确调整绘图大小?

java - 需要检查 gps 是否启用

java - 为什么 Netty/Redisson DNS 解析器在主机名中添加括号?

java - graphql-java-annotations : Argument must be annotated with @GraphQLName, 否则会失败

java - 在 JAXB 中设置默认值

android - 如何为包含&的谷歌地图形成一个网址