0

我正在编写代码以使用单例对象创建应用程序。什么时候开播,

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

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

但是当我通过按主页按钮从应用程序中出来并再次通过长按主页按钮并启动应用程序进入应用程序时,它不会创建新对象。

活动代码:

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++;
    }
}
4

2 回答 2

0

处理这种行为的最佳方法是通过自定义活动的午餐模式属性它的清单文件。根据您的应用程序,您可能会将其设置为 SingleTop 或 SingleInstance。查看文档:Doc

于 2013-01-26T10:22:31.450 回答
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
}

毕竟,你可以对同一个对象做任何你想做的事情,如果你想回到第一个活动,请阅读从活动中获取结果

于 2013-01-18T20:29:26.347 回答