Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can Android source code not have a main method and still run?

Tags:

I've seen this in a few tutorials now... but how in the world can Android source code not have a main method and still run.

For example (from http://developer.android.com/guide/tutorials/hello-world.html):

public class HelloAndroid extends Activity {     /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);     } } 

That runs but there is no main!!!

I've also thought that using things like onCreate (or formLoad, etc.) was bad becuase a constructor should do that work and such built-in methods can be smelly sometimes. But onCreate is an entry point? Even without a main?

What if there is more than one activity... is there a hierarchy to these built in event handlers? OnCreate trumps everything else? Otherwise, how would the app know what to run or where to enter the program?

Thanks!

like image 503
MGoBlue93 Avatar asked Nov 19 '10 01:11

MGoBlue93


2 Answers

Each application will be having it's own Virtual Machine. To run an app, within it's space (VM), must have a main method.

Activities are not the actual classes to be invoked for start of application. There is a class called Application, which will be the root class for an application to be launched.

If there is no main method, how can a VM recognize how to start an app?

Framework has classes called Process, VMRuntime which are responsible for starting an application. Which indeed deal with main method.

For better understanding, study the Zygote service of Android. deals with Applicationmanager Service, ActivityStack Activity Threadds etc.

like image 143
user1903788 Avatar answered Sep 29 '22 14:09

user1903788


That runs but there is no main!!!

Of course. Many things that you might think of as a Java "application" do not have their own main() method. For example, IIRC, servlets, WARs, and the like do not have main() methods -- the main() method, if there is one, is in the container.

But onCreate is an entry point?

onCreate() is a method.

What if there is more than one activity... is there a hierarchy to these built in event handlers?

Not really.

OnCreate trumps everything else?

Not really.

Otherwise, how would the app know what to run or where to enter the program?

An app does not "know what to run or where to enter the program".

An Android application is a basket of components. Some components may be tied to icons in a home screen launcher. Some components may be tied to scheduled timers, like cron jobs or Windows scheduled tasks. Some components may be tied to system events, such as when the device is placed into or removed from a car dock. Those components will be automatically created and used when appropriate (e.g., when a user taps the icon in the home screen launcher). Yet other components are only created and used when your code specifically asks for them.

Thinking of an Android application as if it were a monolithic console-mode Java program will cause you no end of trouble.

like image 33
CommonsWare Avatar answered Sep 29 '22 15:09

CommonsWare