Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MainActivity不是一个静态类,但它在执行时没有任何显式实例化。怎么用?_Java_Android - Fatal编程技术网

Java MainActivity不是一个静态类,但它在执行时没有任何显式实例化。怎么用?

Java MainActivity不是一个静态类,但它在执行时没有任何显式实例化。怎么用?,java,android,Java,Android,我有一个关于Android的非常基本的问题。创建新应用程序时,我们首先定义MainActivity类,然后填充其OnCreate、OnPause、OnResume方法等 现在,MainActivity不是一个静态类,但是,在没有任何实例化的情况下,我们可以看到其中方法的代码执行。有人能告诉我这是怎么回事吗 这又是一个非常基本的疑问,所以请不要否决:)AndroidManifest文件有以下内容 <activity android:name=".MainAct

我有一个关于Android的非常基本的问题。创建新应用程序时,我们首先定义MainActivity类,然后填充其OnCreate、OnPause、OnResume方法等

现在,MainActivity不是一个静态类,但是,在没有任何实例化的情况下,我们可以看到其中方法的代码执行。有人能告诉我这是怎么回事吗


这又是一个非常基本的疑问,所以请不要否决:)

AndroidManifest文件有以下内容

    <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

这就是主要活动的开始方式。。如果从启动器中单击图标,则Main活动开始

您可以指定多个活动,但它们没有意图过滤器。此意图过滤器表示应用程序从启动器启动的主要方式应启动此活动


这就是意图过滤器所做的

问基本问题没有错。。。实际上,这种类型的模式不是Android特有的,但是当你在中间有一些框架时,就会发生这种模式。一些基本的例子是java小程序和servlet

当您启动Java应用程序时,您启动了一个JVM,然后您需要向其中加载一些东西:因此您需要一个静态方法(main),因为JVM中没有对象(还没有)可以引用

如果你在中间有某种框架,那就是启动JVM的框架,并开始用它自己的服务对象填充它:编写你的代码,然后意味着编写你自己的对象(这将是给定的模板的子类)。然后,框架可以注入(加载)对象。框架服务对象通过调用“模板”超类中定义的生命周期方法来管理注入对象的生命周期

因此,例如,当您向浏览器提供一个小程序时,您不会启动一个静态main方法:而是只提供java.applet.applet的一个子类,该子类实现一些实例方法,这些实例方法充当回调来管理生命周期(init、paint、stop…)。浏览器将启动JVM,实例化启动小程序所需的内容,加载小程序并调用它

类似地,使用servlet,您可以对javax.servlet.http.HttpServlet类进行子类化,并实现一些实例(非静态)方法(doGet、doPost…)。Web容器(例如Tomcat)将负责启动JVM,实例化启动servlet所需的内容,加载servlet并调用它


Android中的模式基本相同:您要做的是创建Android.app.Activity的子类。当您启动应用程序时,系统会在清单中查找应该启动的活动,然后“框架”加载它并调用其实例方法(onCreate、onPause、onResume…)

但是你应该在清单文件中声明它。这些都是生命周期方法。您只覆盖那些方法,不要与java的主要方法混淆。。。是android负责为您实例化活动。android框架查看您的清单文件,实例化必要的类并调用必要的启动方法。@Raghunandan:那么您的意思是我们在xml文件AndroidMainfest.xml中在该部分下编写的内容符合实例化条件吗?您唯一部分正确,您可以有多个IntentFilter,但我想应该只有一个能够捕获启动器事件