当前位置: 首页 > 面试题库 >

通过从一个活动调用功能将退出按钮添加到Android App

谯乐池
2023-03-14
问题内容

我在一个活动中具有以下功能

  public void AppExit()
  {
    Editor edit = preferences.edit();
    edit.putString("pref_code", "");
    edit.commit();

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);

    int pid = android.os.Process.myPid();
    android.os.Process.killProcess(pid);

  }

在自己的活动中正常工作。我想称这为另一项活动。我也创建了类实例如下

 Home hm = new Home();
 hm.AppExit();

但它越来越错误

  06-29 19:41:06.024: E/AndroidRuntime(583): FATAL EXCEPTION: main
  06-29 19:41:06.024: E/AndroidRuntime(583): java.lang.NullPointerException
  06-29 19:41:06.024: E/AndroidRuntime(583):    at android.app.Activity.startActivityForResult(Activity.java:2827)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at android.app.Activity.startActivity(Activity.java:2933)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at com.mythrii.timeApp.Home.AppExit(Home.java:219)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at com.mythrii.timeApp.AdminPage.onOptionsItemSelected(AdminPage.java:205)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at android.app.Activity.onMenuItemSelected(Activity.java:2205)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:748)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at android.view.View$PerformClick.run(View.java:9080)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at android.os.Handler.handleCallback(Handler.java:587)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at android.os.Handler.dispatchMessage(Handler.java:92)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at android.os.Looper.loop(Looper.java:130)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at android.app.ActivityThread.main(ActivityThread.java:3683)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at java.lang.reflect.Method.invokeNative(Native Method)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at java.lang.reflect.Method.invoke(Method.java:507)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
  06-29 19:41:06.024: E/AndroidRuntime(583):    at dalvik.system.NativeStart.main(Native Method)

有谁能够帮我…


问题答案:

作为一般建议: 不要利用操作系统

除了常规台式机系统以外,Android(和iOS)是通常没有 那么
多常用应用程序的系统。由于大多数用户经常只使用一手完整的应用程序,因此当您返回主屏幕时,系统不会完全“杀死”该应用程序,以使其在 再次
打开时更快地加载。

这将导致一些应用程序启动非常快(最常用的应用程序)。但是,当Android系统需要占用的资源时,它将自行释放这些资源,从而杀死仍在后台运行的一些较旧的应用程序。

这就是为什么您通常不应该自己终止应用程序的原因。

除了上述陈述,似乎您正在尝试手动启动主屏幕。 不需要这样做!

如果您只是想添加一个选项,该选项将从您的应用程序返回到主屏幕,请this.finish()在中调用Activity。然后将关闭当前活动并返回主屏幕。

最后一点,如果您希望您的应用程序 存储有关当前状态的信息
(好像您正在使用共享首选项一样),则应在Activity的onStop()-method或onPause()-method中执行此操作。有关更多信息,请参阅文档。

无论您自己关闭应用程序还是系统关闭它(因为它需要内存空间),Android系统都会调用此方法。

最后(也是最不重要的),一些 常规的Android编程建议

不要使用new-operator 手动创建活动。让系统执行此操作,并Intent为此目的使用。

活动实际上只是“可以绘画的墙”。它们旨在向用户 展示
一些东西。应用程序代码(以及任何繁重的工作)几乎都应该放在AsyncTask。这样,您的用户界面将始终响应并且永不“冻结”,这会使用户感到紧张。



 类似资料:
  • 我正在使用android 2.1,希望在Mapsavity上添加一个后退按钮。我在这一页上尝试了什么[在操作栏上显示后退按钮,但应用程序崩溃。我已经按照另一个论坛的建议将extends FragmentActivity替换为AppCompatActivity,但应用程序仍然崩溃。我知道这与操作栏有关,因为如果我删除它,应用程序就会工作。操作栏似乎为空。我被卡住了,已经启动了应用程序数次。下面是错误

  • 问题内容: 我有五个按钮,是动态创建的。我的目标是:单击任何按钮以向其中添加活动类,当然还有其他任何人可以通过该活动类将其删除。我该如何实现? 问题答案: 您需要将状态引入组件并在事件处理程序中进行设置。例如render方法的输出: 事件处理程序(元素方法):

  • 问题内容: 通过在某个地方注册全局钩子(即,无需修改实际函数本身)或通过其他方式,是否有任何方法可以使任何函数输出console.log语句? 问题答案: 这是用您选择的函数扩展全局名称空间中所有函数的方法: 不利的一面是,调用后创建的任何函数都不会具有其他行为。

  • 嗨,我已经在应用程序抽屉中创建了片段,现在当我按下一个片段上的后退按钮时,它正在关闭应用程序。

  • 我目前正在处理一个Android项目,当用户在使用对话框主题的活动上按后退按钮时,我遇到了问题。 基本上,我有一个活动,让我们称之为我的活动,第二个活动使用@android: style/Theme.Holo.Dialog称为MyDialog。 当MyDialog活动显示在屏幕上时,活动对话框在对话中按预期启动,但当用户按下返回按钮时,对话框活动按预期关闭,但启动活动即MyActive似乎结束了,

  • 问题内容: 我搜索了在jtable中添加按钮的教程,并从http://tips4java.wordpress.com/2009/07/12/table-button- column/ 找到了一个类文件, 该按钮在哪里设置? 问题答案: 它是通过DefaultTableModel中的数据在表渲染器和编辑器中自动设置的。例如,对于表编辑器,代码为: 表模型的值在哪里。有关详细信息,请参见ButtonC