2012-01-17 61 views
0

其实我创建了一个单例类。现在我的单身课程扩展了活动,并且我已经在此课程上编写了onCreate()onStart()方法。但它永远不会被调用。我使用的代码如下所示。如果有人知道帮我解决这些问题。创建和启动方法不叫

代码

public class cycleManager 
{ 
private static CycleManager m_cycleManagerObj; 

private CycleManager() 
{   
    // Initialise Variable 
    onInitialization(); 

    readData(this); // show error when call from here 
} 

public static synchronized CycleManager getSingletonObject() 
{   
    if (m_cycleManagerObj == null) 
    { 
     m_cycleManagerObj = new CycleManager(); 
    }    
    return m_cycleManagerObj; 
} 

public Object clone() throws CloneNotSupportedException 
{   
    throw new CloneNotSupportedException(); 
} 

public void writeData(Context c) 
{ 
    SharedPreferences preferencesWrite = c.getSharedPreferences("myPreferences", 0); 
    SharedPreferences.Editor editor = preferencesWrite.edit(); 
    // work to be done 
} 
public void readData(Context c) 
{ 
    SharedPreferences preferencesRead = c.getSharedPreferences("myPreferences", 0); 
    // work to be done 
} 
} 

回答

1

事情是Android以自己的方式管理活动:从调用构造函数到调用所有生命周期方法。因此,如果您将您的Activity的构造函数声明为私有,那么Android将无法管理此活动。

为什么你需要singleton Activity-class?考虑different launch modes

+0

其实这是我把所有需要进行操作的方法的类。所以无论何时在哪个活动中我需要这个方法..我只需创建该类的一个实例并调用我想要的方法。 – AndroidDev 2012-01-17 07:35:47

+1

您不应该使用Activity类来保存这些方法。如你现在所做的那样,使用单独的课程。您应该将Activity类视为单个屏幕的表示。 – 2012-01-17 08:46:04

+1

澄清,不一定是一个单独的屏幕,但个别任务所需的用户界面。否则,a.ch.是现货。单身人士活动是**糟糕的想法,并正在为自己的内存泄漏设置自己。在尝试这样的事情之前,您应该阅读Activity Lifecycle和约定。 – 2012-01-17 09:29:48

0

,自己不是公职method.They保护method.You应该重写现有method.try像下面这样。

@Override 
    protected void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 
    } 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
} 
1

检查您在AndroidManifest.xml中的活动。

<activity 
    android:configChanges="orientation|keyboardHidden" 
    android:name=".ActivityName"> 
0

这里的关键是,Android应该是管理你的活动生命周期,而不是你。

onCreate和onStart(以及onPause,onDestroy和所有其他android活动生命周期函数)都由Android主线程上的循环调用者调用。

你是怎么开始这项活动的?它是否在您的舱单中被宣布为您的主要活动和发射器?您是否调用了startActivity并传​​递了类名?

事实上,你正在创建一个你的活动的单例实例,并且它的构造函数是私有的,这向我建议,当你想要的时候,Android将无法启动这个活动,虽然有一些函数用于传递现有的活动被管理可能存在,而我从来没有见过它。

如果onCreate和onStart从未被调用,这意味着Android不知道它应该运行您的活动。

0

由于您的班级不是Context的子类,因此出现错误。将Context属性添加到getSingletonObject(Context context)方法并将其传递给CycleManager(Context context)构造函数。