如何在Android中为整个应用程序创建单个对象

时间:2013-01-18 19:30:42

标签: android android-layout android-intent android-widget

我正在编写代码来使用单例对象创建应用程序。 何时启动,

  1. 问题出在我启动应用程序时。它将创建一个对象,当我按下后退按钮时,应用程序将关闭。当我长按主页按钮并再次启动应用程序时,它将创建另一个对象。

  2. 当我再次通过点击图标启动应用程序时,它将生成另一个对象。

  3. 但是当我通过按下主页按钮从应用程序中退出并再次按下主页按钮并启动应用程序来转到应用程序时,它将不会创建新对象。

    活动代码:

    package com.gmmusic.test;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    
    public class GmmusicActivity extends Activity
    {
        /** Called when the activity is first created. */
        private static String TAG = "GmmusicActivity";
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Log.i(TAG, "Created instance#"+ MyMainApplication.getInstance().count());
        }
    }
    

    单身人士代码:

    package com.gmmusic.test;
    
    import android.app.Application;
    import android.util.Log;
    
    public class MyMainApplication extends Application {
    
        private static String TAG = "MyMainApplication";
    
        private static MyMainApplication singleton;
    
        public static MyMainApplication getInstance() {
            return singleton;
        }
    
        private int count = 0;
        private int count1=0;
        @Override
        public void onCreate() {
            // TODO Auto-generated method stub
            super.onCreate();
    
            singleton = this;
            Log.i(TAG, "Singleton created");
            System.out.println("count1 >> "+count1);
            count1++;
        }
    
        public int count() {
            return count++;
        }
    }
    

2 个答案:

答案 0 :(得分:0)

您可以创建一个实现Serializeable的类:

class Person implements Serializeable
    String name;
    public Person(String name){
        this.name = name;
    }
}

如果你有另一个意图,你可以通过它,如果你关闭这个活动,你可以像这样得到结果

Person p = new Person("Oliver");
Intent i = new Intent()
i.setClass(this, NextActivity.class);
i.putExtra("person", p);
startActivityForResult(i,1) // 1 is ResultCode

然后在另一个Activity中,您可以获取此对象,例如在onCreate:

protected void onCreate(Bundle savedInstanceState) {
     Log.d(TAG, "onCreate");
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_next);
     Person p = (Person) getIntent().getSerializableExtra("person");
     // The same string as in first_activity
}

毕竟,你可以用同一个对象做任何你想做的事情,如果你想回到第一个活动,请阅读 Getting a Result from an Activity

答案 1 :(得分:0)

处理此行为的最佳方法是将活动的午餐模式属性自定义为清单文件。 您可能会根据您的应用程序将其设置为SingleTop或SingleInstance。 请参阅文档:Doc