开机出现这个卡死MainWindow然后必须重新启动才好?

在某种情况下,我们可能希望我们的客户端程序尽可能连续不断的运行在我们的系统中,并保持稳定。

以下几种方式可以帮助我们做到这一点:

electron为我们提供了监听程序崩溃的事件:

当渲染进程崩溃或被结束时触发

此事件是用来家庭渲染进程崩溃的,但是当主进程意外崩溃时也会触发该事件。

在监测到程序崩溃后,我们要让程序重新启动,此时我们要首先判断window对象是否被销毁,也就是主进程是否被杀死,还是渲染进程崩溃,同时作出不同的处理。

当mainWin被销毁时我们直接重启整个应用,使用如下api:

从当前实例退出,重启应用。 默认情况下,新的实例会和当前实例使用相同的工作目录以及命令行参数。 当设置了 args 参数时, args 将作为命令行参数传递。 当设置了 execPath ,execPath 将被执行以重新启动,而不是当前的应用程序。 请注意, 此方法在执行时不会退出当前的应用程序, 你需要在调用 app.relaunch 方法后再执行 app. quit 或者

只是渲染进程崩溃,我们只需将其他窗体销毁,然后重新load我们的主窗口。

当然,我们还要记录一下程序的崩溃日志,我们要确保日志接口发出成功后再重启我们的程序:

下面是程序崩溃后的完整逻辑:

// 崩溃日志请求成功....

写好代码之后,我们可以直接在控制台输入 process.crash()来进行测试,或者直接在任务管理器杀掉我们的进程进行测试。

开机自启是保证我们的程序能长时间在机器上运行很重要的一点。

所以我们也要将我们程序的路径写到这里。

发现了一个非常好的写注册表的模块,winreg
注意mac不能使用这个模块,所以首先要判断是否为window再引用这个模块。

借助这个模块我们可以非常简单的修改注册表:

执行完程序之后,再看注册表,发现我们程序的路径已经写进去了:

然后电脑重启后你的程序就自动启动了。

向qq和微信一样,有的时候我们并不想让用户通过点关闭按钮的时候就关闭程序,而是把程序最小化到托盘,在托盘上做真正的退出操作。

首先要监听窗口的关闭事件,阻止用户关闭操作的默认行为。

然而这时你发现,这只是最小化了程序,任务栏里程序依然存在,我们需要让程序在任务栏里也消失:

这时程序就再也找不到了,任务托盘中也没有我们的程序,所以我们要先创建好任务托盘,并做好事件监听:

以上这些操作为我们的程序又增加了好几层的防护措施,我们的程序就不会那么轻而易举的挂掉啦!

大家好,我在wpf中建立了一个NavigationWindow,里面有一个page,page是图片背景,可能因为加载的时候有些慢的缘故,程序在启动的时候总是先显示一下白屏,然后才能显示page页中的内容,请问如何能不显示这个白屏,而是在屏幕中间显示一个图标,表示程序正在启动呢?先谢谢大家了。

在Android系统中,Activity和Service是应用程序的核心组件,它们以松藕合的方式组合在一起构成了一个完整的应用程序,这得益于应用程序框架层提供了一套完整的机制来协助应用程序启动这些Activity和Service,以及提供Binder机制帮助它们相互间进行通信。

在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity;应用程序的默认Activity启动起来后,它又可以在内部通过调用startActvity接口启动新的Activity,依此类推,每一个Activity都可以在内部启动新的Activity。通过这种连锁反应,按需启动Activity,从而完成应用程序的功能。

这里,我们通过一个具体的例子来说明如何启动Android应用程序的Activity。Activity的启动方式有两种,一种是显式的,一种是隐式的,隐式启动可以使得Activity之间的藕合性更加松散,因此,这里只关注隐式启动Activity的方法。


② system_server进程接收到请求后,向zygote进程发送创建进程的请求;




 
 
 
 
 
 
 
 
 

注意,这里由于是第一次启动应用程序的Activity,所以下面语句:

process的组合就可以为每一个应用程序创建一个ProcessRecord。当然,我们可以配置两个应用程序具有相同的uid和package,或者在AndroidManifest.xml配置文件的application标签或者activity标签中显式指定相同的process属性值,这样,不同的应用程序也可以在同一个进程中启动。



 
 
 
 
 
 
 
 
 
 
 
 

这里再次检查是否已经有以process + uid命名的进程存在,在我们这个情景中,返回值app为null,因此,后面会创建一个ProcessRecord,并存保存在成员变量mProcessNames中,最后,调用另一个startProcessLocked函数进一步操作:

这里主要是调用Process.start接口来创建一个新的进程,新的进程会导入android.app.ActivityThread类,并且执行它的main函数,这就是为什么我们前面说每一个应用程序都有一个ActivityThread实例来对应的原因。






 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 





 
 
 
 
 
 
 
 
 
 
 

函数把消息内容放在msg中,然后通过mH把消息分发出去,这里的成员变量mH我们在前面已经见过,消息分发出去后,最后会调用H类的handleMessage函数。



 
 
 
 
 
 
 
 



 
 

后面的代码主要创建Activity的上下文信息,并通过attach方法将这些上下文信息设置到MainActivity中去:


这样,MainActivity就启动起来了,整个应用程序也启动起来了。


整个应用程序的启动过程要执行很多步骤,但是整体来看,主要分为以下五个阶段:

我要回帖

更多关于 电脑出现问题重新启动 的文章

 

随机推荐