0

私は1つのアクティビティで次の機能を持っています

  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

一般的なアドバイスとして: OS を悪用しないでください。

通常のデスクトップ システム以外では、Android (および iOS) は、一般的に使用するアプリケーションがそれほど多くないシステムです。ほとんどのユーザーは多くのアプリケーションを頻繁に使用するだけなので、ホーム画面に戻ったときにシステムがアプリを完全に「強制終了」するわけではありませ

これにより、いくつかのアプリケーションが非常に高速に起動します (最も一般的に使用されるアプリケーション)。しかし、Android システムが占有されているリソースを必要とする場合、それらを自動的に解放し、まだバックグラウンドで実行されている一部の古いアプリケーションを強制終了します。

そのため、通常、自分でアプリケーションを終了するべきではありません。


上記のステートメントとは別に、ホーム画面を手動で起動しようとしているようです。そうする必要はありません!

アプリケーションからホーム画面に戻るオプションを追加するだけの場合はthis.finish()Activity. これにより、現在のアクティビティが閉じられ、ホーム画面に戻ります。


最後のポイントとして、アプリケーションに現在の状態に関する情報を保存させたい場合(Shared Preferences を使用しているように見える場合)、Activity のonStop()-methodまたはonPause()-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);

そしてホームアクティビティで:

protected void onResume() {

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