I guess I was looking to find out how cell-phones do it - my old Ericcson is powered off - the battery has been taken out and replaced.
When I come to turn it on, I have to hold the button down for a certain time before the unit comes on - or is that all just consumer perception - it actually started being powered as soon as the battery got installed and the hold-to-power is just a software trick?
You can do a true power-off mode, not just sleep, using a FET or LDO with enable line. The gate/enable line is connected to both the MCU and the button. When the button is pressed it pulls the line low and enables the FET/LDO, turning the micro on. The micro then waits two seconds and starts holding the line low itself, so that even if the user lets go of the button it remains turned on. It can then turn itself off by simply releasing the line.
Having said that, modern MCUs sleep at such insanely low current anyway it's hardly worth bothering with. Sub 5uA should be easy on a MEGA. You need to connect the button to a GPIO with async interrupt capability, so that the interrupt will be triggered even in sleep mode. Synchronous interrupts need the MCU, or at least the CPU clock, to be running.
That sounds more like it. An LDO is a Low DropOut regulator? And I'm not up to FET yet in my 'Dummies Guide to Electronics', so I suspect this is beyond my abilities right now and I need to keep working through the book - and take the Arduino recommendation of recessing a switch
Doing some reading, the Atmega328P that I will be using has six sleep modes - the most frugal of which is SLEEP_MODE_PWR_DOWN, which uses 0.36 mA. That's less than half an amp in a year. Assuming I use batteries which hold their charge for that period - like low self-discharge NiMH - it makes sense to do it in software, like you say.
Thanks to all for your replies - very thought provoking.