0

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

  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)

有谁能够帮助我...

4

3 回答 3

2

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

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

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

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


除了上述声明之外,您似乎正在尝试手动启动主屏幕。没有必要这样做!

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


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

这个方法会被Android系统调用,不管是你自己关闭应用还是系统关闭它(因为它需要内存空间)。


最后(也是最不重要的)一些通用的 Android 编程建议

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

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

于 2012-06-29T14:40:00.400 回答
1

对于活动通信,您可以使用广播消息。

如何发送和接收广播消息

  • 另一个很好的教程:

http://mobisys.in/blog/2012/01/android-sending-receiving-broadcast-messages/

于 2012-06-29T14:27:10.930 回答
1

运行这个:

Intent i = new Intent(this,Home.class);
Bundle data = new Bundle();
data.putString("0","0");
i.putExtras(data);
startActivity(i);

在 Home 活动中:

protected void onResume() {

Intent i = getIntent();
if (i.getExtras() != null) {
    //AppExit();  unneccessary
    finish();
}
于 2012-06-29T14:33:54.680 回答