Android:onCreate()被多次调用(而不是我)

问题描述:

有一些我现在不太明白的东西。Android:onCreate()被多次调用(而不是我)

我的主要活动类创建一个服务,它创建一个等待TCP连接的新线程。一旦一个人进来,就会启动一个新的活动:

Intent dialogIntent = new Intent(getBaseContext(), VoIPCall.class); 
dialogIntent.putExtra("inetAddress", clientSocket.getInetAddress()); 
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplication().startActivity(dialogIntent); 

之后,该类的onCreate()方法获取运行。它将创建2个线程:一个记录并发送数据,另一个接收并播放数据。那些线程有一个永远的while循环。

出于某种原因,我注意到最后一个类的onCreate()被再次调用,这使得我的程序崩溃。我不明白为什么它被再次调用,因为只有2个线程正在运行,没有用户交互。该文档说:“首次创建活动时调用。”该活动已在运行,我不想创建它。

有人能解释我这种行为吗?

Android会在某些“设备配置更改”后重新创建您的活动。一个这样的例子是定位。你可以在这里阅读更多... http://developer.android.com/guide/topics/resources/runtime-changes.html

也许你的线程中的某些东西被认为是配置更改?

如果出现这种情况,您可能会发现扩展Application类并进行初始化时很有用。看到这个帖子... Activity restart on rotation Android

HTH

+0

非常感谢! – James 2010-11-29 03:33:58

这发生在我身上一次,当我使用的开发选项的应用部分“不救的行动”。确保你已经关闭了。

我在某些三星设备上遇到了两次被叫做Activity的事件。我解决了它在Manifest上的Activity标签上添加android:launchMode =“singleInstance”。我希望这可以帮助。

当您尝试在意图中使用值开始活动时,我观察到此问题。

下面就是Activity_A调用Activity_B并在Activity_B要收集的意图传递值的示例:

Intent intent = new Intent(this, activityB.class); 
intent.putExtra("val1", someValue1); 
intent.putExtra("val2", someValue2); 
intent.putExtra("val3", someValue3); 
this.StartActivity(intent); 

在这种情况下,你可以设置你的AndroidManifest.xml和Activity_B android:launchModel="singleInstance"android:launchModel="singleTop"会只发射一次。希望这可以帮助。