3 ms·
There is a fundamental difference between well written Android applications and iOS ones. iOS apps are expected to run as an island. Everything they want to d
by rogerbinns 14y ago
There is a fundamental difference between well written Android applications and iOS ones. iOS apps are expected to run as an island. Everything they want to do should be included into the binary. There is essentially one entry point (a main() equivalent). Think of it like a statically linked binary (which it mostly is).
Well written Android applications are structured like mashups. There is no main. There are multiple entry points for screens (aka Activities) as well as entry points for processing (Services), data (ContentProviders) and even a mechanism (BroadcastReceiver) for telling all interested apps about events (eg battery charge level changing, incoming calls, apps being installed). There is a mechanism for decoupled communication (Intents) which allow specification of a verb (eg VIEW, PICK, DIAL, EDIT) and one or more bits of accompanying data (eg text, urls, images). It is trivial to bring up/use part of another app that didn't even exist at the time yours was released and have the experience combined. (You can always tell iOS apps ported to Android because they don't do mashups or collaborate with the apps already on your system.)
This means that an iOS app will never be improved by other apps installed on the system, while Android ones can be. And because of Intents it becomes possible for a user to choose their own experience - want to use a different browser or app for viewing images? No problem. For example I installed the GitHub app on Android and it added itself to the AccountManager. Now other apps can collaborate with it (eg it supports the SEND verb which creates a Gist) or ask it to display an issue/user/commit.
The (long winded) point behind this is that app installations are far more valuable to Android users. If things were only decided on technical merit then Android will end up nailing iOS because of this. But that walled garden sure looks nice to many people, and it is rare for users to really notice what is going on and they definitely won't have both devices to continually contrast and compare.
- CrankyPants 14y ago> This means that an iOS app will never be improved by other apps installed on the system I've got apps launching links in iCab, other apps using files from the Dropbox app, etc., so that seems a bit inflexible. I get that Android's app-to-app crosstalk is considerably deeper, it's just the characterization of iOS that doesn't seem totally right to me.
- rogerbinns 14y agoLaunching apps from file associations isn't integration. (Windows 1.0 did that.) Try sending files instead. The source app on iOS has to integrate every library it wants to support. eg to have Dropbox it would need to include a Dropbox library, and a Google library, and a Box library etc. (And ask for usernames and passwords in each app including the library.) A frequent complaint of users with other browsers installed is how often the builtin Safari comes up instead. Try alternate dialers. On Android you just install an app that claims to handle tel:// urls. You are out of luck on iOS. Try adding another social network that can handle sharing. Again you are out of luck on iOS until every source app adds libraries. And images, contacts, calendars, and whatever some startup thinks of next week. iOS is trivial in this regard - there is essentially no cross app integration. That fits with Apple's walled garden model, and means that apps do not change their functionality after installation which fits in with Apple's review process. Having "deterministic" app behaviour hasn't hurt Apple so far - they rake in over half of the smartphone industry profits.