Tombstone

做个小实验:

 

在onDeactivate()和onClosing()方法中分别执行下面方法、:

 

 

for(int i = 0; i< 10; i++)
{
      Debug.Writeline("i:"+i);
      Thread.sleep(1000);

}

 结果是,在tomstone 和 关掉程序的时候,这个两个方法,不会影响界面的反应,但是会在后台继续走,这说明,虽然按下 window或者back键的时候,界面是关掉了,但是主线程还在等待函数的执行结束。

 

同样,在onDeactivated()和onClosing()中执行下面方法:

 

 

private void run()
{
      for(int i= 0; i< 10; i++)
     {
           Debug.WriteLine("i:"+);
           Thread.sleep(1000);
       }
}

new Thread(new ThreadStart(run)).Start();

 

在tombstone 的时候,新的线程会停止执行,然后当再次激活的时候,线程开始继续刚才的状态执行。

在关闭程序的时候,新的线程没有执行,就被杀死了。

 

这说明一个问题,tombstone 会保存当前程序的状态,即使是一个正在执行的线程,也会记住那个瞬间保存起来。当激活的时候,再回到之前的状态,而在关闭程序的时候,主线程执行完毕,立刻结束。不管是不是还有别的线程在执行。

 

所以,千万不要试图再程序关闭的时候,开一个线程去做一些保存的操作,就同步执行~这时候虽然界面没有了,但是线程还是存在的,如果自己开线程的话,界面没了,你的线程也会没得~

 

 

------------------------------

 

以上全错,有误导嫌疑,事实的情况是在我测试的时候,wp sdk使用的7.1版本,7.1版本不会立刻进入Tombstone状态,而是先进入dormant状态,事实上上面的现象是在dormant状态下产生的,so,真实的tombstone状态会导致App和页面类都被摧毁,host在其中的数据都会丢失,所以需要用 PhoneApplicationService.state 字典来保存数据!

 

但是对于一些需要长期保存的数据应该保存在文件里面,因为Wp最多在后台可以维持5个后台应用,这些后台应用可能出于dormant状态,也可能出于tombstone状态。但是一旦打开了第6个程序,那么最先被打开的程序将被终结, PhoneApplicationService.state 字典中的数据也会消失。

 

 

 

你可能感兴趣的:(BST)