我想创建一个名为“Loyalty Card”的非常简单的Android应用程序,以便在电话屏幕上显示我的食品店的条形码图像。食品店退房时的条形码阅读器可以看到这张图片并认出我。我已经测试了这个概念,它看起来效果很好。
但是,由于我每周只访问食品店,因此在扫描条形码后没有理由让应用程序在后台运行(甚至空闲)。一旦我签出,结束,终止,摧毁申请似乎是明智的。而且我认为一个合理的用户可以看到有一个“关闭”按钮的价值。
通过在Java方法中使用应用程序XML中的onClick和finish(),我设法让关闭按钮从它到达的地方返回。 (我的意思是,如果通过快捷方式从主屏幕启动应用程序,则我的关闭按钮将返回到主屏幕。如果应用程序是从应用程序抽屉启动,则关闭按钮将返回到应用程序抽屉。) In无论哪种情况,应用程序列表仍然包含正在运行/空闲的应用程序。我真的,真的希望应用程序结束,停止,自毁,可以这么说。
在阅读有关此主题的内容时,我认识到许多人认为使用按钮关闭应用程序的尝试并不是一种好习惯。但是对于这种使用特殊情况,用户可能不希望再次拉出条形码直到下周,当他/她购买食物时。
在我看来,我希望用户能够点击关闭按钮(单步)并让应用程序本身完全停止。
另一种方法是期望用户点击后退按钮(或主页),然后点击应用程序列表按钮,可能滚动到众多正在运行的其他正在运行的应用程序,然后右键滑动以手动暂停应用程序(四个步骤)。
我不了解您,但我通常会有一长串正在运行的应用程序,并且看到一个未使用的额外应用程序是一种令人讨厌的问题。特别是因为在这种使用情况下,用户不太可能想要在一周内再次看到该条形码。
话虽如此,我承认我是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作为开发环境,这可能会使其复杂化。答案 0 :(得分:2)
public void closeIt (View view) {
//super.finish();
finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
return;
}
更新:如果您有10,20个多个活动正在运行,并且您想要完成所有活动并退出系统。
在application class
或constants class.
<强>常量强>
public class Constants {
public static ArrayList<Activity> activities = new ArrayList<Activity>();
}
MainActivity 在此数组中添加当前活动引用
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);
}
});
}
}
答案 1 :(得分:0)
而不是finish()
,请在关闭按钮中使用finishAffinity()
(注意:Android 4.1 +)