2011-01-27 111 views
0

在我的代码中,我开始了街景的新活动。主要应用程序在启动街景活动后死亡

Intent streetView = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri)); 
startActivity(streetView); 

它启动街景就好了。如果我没有做太多的事情,我可以点击后退按钮,我的应用程序就坐在那里等待没有任何变化。

不过,如果我使用街景视图了一下,环顾四周并移动的看法,我看到这个在logcat中:

10月1日至27日:53:27.526:信息/ ActivityManager(1079):低内存:没有更多的后台进程。

10月1日至27日:53:27.636:DEBUG/dalvikvm(32218):GC_FOR_MALLOC释放在655ms

10月1日至27日3054级的对象/ 198608字节:53:27.831:DEBUG/dalvikvm(32164):GC_FOR_MALLOC释放1054级的对象/在342ms

十月1日至27日51664字节:53:27.862:INFO/dalvikvm堆(32164):生长堆(FRAG情况下),以用于3.656MB 87396字节分配

01- 27 10:53:27.878:INFO/ActivityManager(1079):进程com.favorite.me(pid 32135)已经死亡。

10月1日至27日:53:27.878:INFO/ActivityManager(1079):内存不足:没有更多的后台进程。

10月1日至27日:53:27.482:INFO/ActivityManager(1079):进程com.myapp.app(PID 31481)已经死亡。

10月1日至27日:53:27.490:INFO /窗口管理(1079):WIN死亡:窗口{44c68ba8 com.myapp.app/com.myapp.app.MyLocation暂停= FALSE}

然后,当我点击后退按钮返回到我的应用程序,似乎所有的变量已被重置为空,就像我失去了我的应用程序的状态。解决问题的唯一方法是再次点击后退按钮并重新启动该活动。

从我可以告诉,它不是调用的onPause()或的onSaveInstanceState()方法和OS是杀死我的应用程序的内存来运行街景。

有什么我需要做不同?

这里是我的OnCreate,onRestoreInstanceState的onSaveInstanceState和方法:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

 @Override 
    public void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 
     sLong = savedInstanceState.getDouble("sLong"); 
     sLat = savedInstanceState.getDouble("sLat"); 
     sMapStyle = savedInstanceState.getBoolean("sMapStyle"); 
     sMapUpdate = savedInstanceState.getBoolean("sMapUpdate"); 
     sMapStreet = savedInstanceState.getBoolean("sMapStreet"); 
     sFirstTime = savedInstanceState.getBoolean("sFirstTime"); 
     locationAvailable = savedInstanceState.getBoolean("locationAvailable"); 
     sGPSFlag = savedInstanceState.getBoolean("sGPSFlag"); 
     sMessage = savedInstanceState.getString("sMessage"); 
     sMap = savedInstanceState.getString("sMap"); 
     sGPS = savedInstanceState.getString("sGPS"); 
     sAddressIn = savedInstanceState.getString("sAddressIn"); 
     sGPSLat = savedInstanceState.getString("sGPSLat"); 
     sGPSLong = savedInstanceState.getString("sGPSLong"); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
     super.onSaveInstanceState(savedInstanceState); 
     savedInstanceState.putDouble("sLong",sLong); 
     savedInstanceState.putDouble("sLat",sLat); 
     savedInstanceState.putBoolean("sMapStyle",sMapStyle); 
     savedInstanceState.putBoolean("sMapUpdate",sMapUpdate); 
     savedInstanceState.putBoolean("sMapStreet",sMapStreet); 
     savedInstanceState.putBoolean("sFirstTime",sFirstTime); 
     savedInstanceState.putBoolean("locationAvailable",locationAvailable); 
     savedInstanceState.putBoolean("sGPSFlag",sGPSFlag); 
     savedInstanceState.putString("sMessage",sMessage); 
     savedInstanceState.putString("sMap",sMap); 
     savedInstanceState.putString("sGPS",sGPS); 
     savedInstanceState.putString("sAddressIn",sAddressIn); 
     savedInstanceState.putString("sGPSLat",sGPSLat); 
     savedInstanceState.putString("sGPSLong",sGPSLong); 
    } 

我想我可能对为什么会这样领先。仍然不确定它有多正确。 我设置了一些调试消息,我看到onRestoreInstanceState()onSaveInstanceState()方法运行。

问题是,它不会将我保存的实例恢复到之后我的onCreate()方法结束。但是在onCreate()方法中,我需要这些变量在这个时候仍然是空的。如何让我的代码在onCreate()之后运行,但不需要任何用户输入?或者我怎样才能在我的代码之前运行onRestoreInstanceState()

+0

你怎么知道'onpause()`和`onSaveInstanceState()`没有被调用?你是否试图在这些方法中的一个(或两个)中保存你的状态?你记录了他们的电话吗? – 2011-01-27 16:34:31

+0

从logcat中告诉我暂停= false。所以它看起来不像它的运行onpause()。另外我把我试图保存在我的onSaveInstanceState()方法中的变量。 – Brian 2011-01-27 17:39:41

回答

2

你可能无法正确使用onSaveInstanceState

  1. 确保你写的,代表你的应用程序的状态到包变量传递给你的onSaveInstanceState

  2. 在你活动的onCreate,使用给定的包来恢复你的状态。或者,您可以在onRestoreInstanceState中执行此操作。

请参阅this stackoverflow问题的完整示例。

1

如果您的应用被杀死,以腾出资源,那么就没有什么可以做,以防止它,甚至保存实例数据被杀害之前。

看看Android开发站点上的Saving Persistent State。他们认为,可能有必要更积极地节省您的实例状态 - 这将防止当你的应用程序是由Android杀死失去状态:

你可能会想提交您的 数据更积极地在关键 您的活动的 生命周期中的时间:开始 一个新的活动,完成你自己的 活动,当用户切换输入字段之间 前等

之前举例而言,所有我可以建议是,你明确SA在启动街景活动之前查看您的实例状态。

如果这无助于您的实例状态在您的onCreate中为null,并且您确定它已正确保存,那么您可能需要在onCreate中的其余代码之前恢复实例状态。

对于onRestoreInstanceState:

当活动正在从 重新初始化以前保存 状态这种方法是在onStart() 之后调用,因为

也是从相同的链接注意这里在 savedInstanceState。

现在在onStart:

的onCreate(捆绑)后调用 - onRestart后或 ()当活动 已经停了,但现在又 被显示给用户。

所以,你不能从onRestoreInstanceState中恢复onCreate所需的任何状态 - 你必须在onCreate中执行此操作。

0

的onSaveInstanceState在功能“super.onSaveInstanceState”应该是在年底。

相关问题