Wednesday, October 07, 2009


EverApp allows WM6.x users to make individual applications immune from Windows Mobile memory management.

Apps managed by EverApp will remain open and accessible regardless of memory conditions.


Q: Why was EverApp created?

EverApp was created to solve a problem plaguing many users under WM6.5 (though it is potentially beneficial for any WM6.x user). The memory management routines under WM6.5 seem particularly aggressive, and many users experience situations where they can only keep one or two applications open simultaneously before WM begins shutting down background apps.

Q: Why is this a problem?

In a perfect world, every WM app would be written properly. That is, it *should* save its state when shutting down and restore it when starting up. In this way, the fact that an application gets shut down by the operating system is almost transparent to the user. In situations where the application performs some function that needs to run continuously (like an MP3 player, for example), the application *should* employ a UI thread and a processing thread so that killing the UI thread doesn't stop the player.

Unfortunately we don't live in a perfect world, and lots of useful applications out there don't play well with Windows Mobile memory management. Blame the app, or blame Windows Mobile. Regardless, in situations where the application stops functioning as desired when shut down by WM memory management, EverApp can help sidestep the problem.

Q: How does it work?

EverApp continually monitors the list of running apps. When it detects that a protected application has been sent to the background, EverApp temporarily re-assigns that application's window to a special, hidden window owned by EverApp. This special window is immune to shutdown by WM memory management. Likewise, applications assigned as children of this window are also immune to shutdown.

The protected application continues running in the background (it won't appear on most task switchers, but is visibile in the process list). When the application is requested (activated) by the user through the EverApp UI, EverApp fully restores the hidden application.

Q: Can/Should I use it for *any* application?

No. You should avoid it using on applications which already gracefully handle shutdowns themselves, and/or already use background processes to manage their own persistence (for example, iGo and Pocket Player). Applications that don't serve a valuable function just sitting in the background (app launchers, for example) don't generally need to be protected. It also may not work well on applications that do extraordinary things with their windows. Please post results so that we can continue to expand the list of known problem-apps below.

Q: This sounds promising, but won't keeping too many apps running cause stability issues?

Possibly, yes. There's a reason WM tries to shut down applications as you open new ones. Trying to manage 2 or 3 critical applications through EverApp should be fine. Trying to run a dozen might cause WM to actually run out of memory and crash/shutdown. It's important to pick just those apps that are valuable to keep running full-time and don't already manage themselves properly.

Q: What are the operating system requirements?

.NET Compact Framework 3.5
Windows Mobile 6.x

Q: What handhelds will this work on?

It was developed and tested on an Omnia i910. However, it should function properly on any WM6.x device. Please post success and failure stories to the thread so we can keep track and address hardware issues that may crop up.

Q: What enhancements are planned?

Autostart the service on WM startup
[Done] Command-line interface (so you can activate an app without having to use the EverApp UI)
Better visual indication in the Protected Apps list of what is currently not running/running/protected
Inclusion of non-protected apps in the app list (making EverApp a general task manager as well).

Q: How does it impact battery life?

The monitoring EverApp does is pretty lightweight. All testing thus far has shown no noticeable impact on battery life.

Q: What applications should I avoid using EverApp for (these apps already manage themselves properly and/or make complex use of their windows that causes problems for EverApp)?

EverApp, S2U2, Conduit Pocket Player, iGo8
(more to follow...)

Q: I'm going to flash my phone and I want to preserve EverApp's configuration. How can I do that?

Copy everapp.xml from your EverApp application folder (\program files\everapp or wherever you installed to) and put it someplace safe. After flashing, re-install EverApp. Before starting EverApp, copy everapp.xml back in to the new EverApp application folder.


Install the attached CAB as you would any other CAB.
Launch EverApp from the Start menu.

Main UI

This presents a list of protected applications. Initially this will be completely blank, so don't be alarmed if the application looks a little empty.

Soft Button Menu Options

Allows you to add executables to EverApp's list of protected applications. Note that the application does NOT have to currently be running to be Added.

Remove the currently selected application from the list of protected apps.

Main->Run/Stop Service
Toggles the EverApp monitoring service. This service needs to be running for applications to be monitored and protected.

Main->About & Exit
Fairly self-explanatory. (Note that exiting the UI will leave the EverApp service running once it has been started, so you can go ahead and close the UI without worrying about interrupting monitoring and protection).

This will unhide the selected application (assuming it is currently being protected by EverApp). You can also double-click the app in the list or press/hold and select Activate from the popup menu.

Protected App List context menu (press and hold an app)

Same as Main->Add

Same as Main->Remove

Manage Duplicates
When enabled, EverApp will detect if a second instance of a protected app is launched, kill it, and bring the original protected app into the foreground.


This allows the creation of shortcuts that can be used to activate protected apps. This is useful if you want to bind activation of a protected app to a hardware key. The format for the shortcut should be:

\full\path\to\EACmdLine.exe show "\full\path\to\target"


No comments: