Android - Activity构造函数 [英] Android - Activity constructor
问题描述
我注意到,使用快捷键 Alt + Insert
并选择构建器,它试图创建一个构造函数与每个私有属性(例如 cManager
和 mTextView
)。我记得我已经创建了没有它的项目并且工作正常。
当我运行应用程序时,错误发生在完整的logcat和 / code>构造函数:
具有私有属性的构造函数:
private ConnectivityManager cManager;
private TextView mTextView;
public SplashScreenActivity(){
this.cManager =(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
this.mTextView =(TextView)this.findViewById(R.id.mProgressText);
}
Logcat:
02-20 18:20:56.155 1591-1591 / com.universo91.towersrock I / art:not late-enabling -Xcheck:jni(already on)
02-20 18:20:58.355 1591-1591 / com.universo91.towersrock D / AndroidRuntime:关闭VM
---------崩溃开始
02-20 18:20:58.361 1591 -1591 / com.universo91.towersrock E / AndroidRuntime:FATAL EXCEPTION:main
进程:com.universo91.towersrock,PID:1591
java.lang.RuntimeException:无法实例化活动ComponentInfo {com.universo91 .towersrock / com.universo91.towersrock.Pages.SplashScreenActivity}:java.lang.InstantiationException:class com.universo91.towersrock.Pages.SplashScreenActivity没有零参数构造函数
在android.app.ActivityThread.performLaunchActivity(ActivityThread。 java:2209)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android。 app.ActivityThread $ H.handleMessage(ActivityThread.java:1278)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java: 135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect。 Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit。 main(ZygoteInit.java:694)
导致:java.lang.InstantiationException:class com.universo91.towersrock.Pages.SplashScreenActivity没有零参数构造函数
at java.lang.Class.newInstance(Class .java:1563)
在android.app.Instrumentation.newActivity(Instrumentation.java:1065)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
在android。 app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java :1278)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:135)
在android.app。 ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by:java.lang.NoSuchMethodException:< init> []
at java.lang.Class.getConstructor(Class.java:531)
at java.lang.Class.getDeclaredConstructor(Class.java:510)
at java.lang.Class .newInstance(Class.java:1561)
在android.app.Instrumentation.newActivity(Instrumentation.java:1065)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1278)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:135)
android.app.ActivityThread.main(ActivityThread.java:5221)
在java.lang.reflect.Method.invoke(本地方法)
在java.lang.reflect.Method.invoke(Method.java :372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694 )
02-20 18:20:58.772 1591-1603 / com.universo91.towersrock我/艺术:背景粘性并发标记扫描GC释放1747(114KB)AllocSpace对象,0(0B)LOS对象,37%免费,391KB / 623KB,暂停825us总计382.655ms
02-20 18:21:29.824 1690-1690 / com.universo91.towersrock D / AndroidRuntime:关闭VM
02-20 18:21:29.829 1690-1690 / com.universo91.towersrock E / AndroidRuntime:FATAL EXCEPTION:main
进程:com.universo91.towersrock,PID:1690
java.lang.RuntimeException:无法实例化活动ComponentInfo {com。 universo91.towersrock / com.universo91.towersrock.Pages.SplashScreenActivity}:java.lang.InstantiationException:class com.universo91.towersrock.Pages.SplashScreenActivity没有零参数构造函数
在android.app.ActivityThread.performLaunchActivity(ActivityThread .java:2209)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android .app.ActivityThread $ H.handleMessage(ActivityThread.java:1278)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java :135)
在android.app.ActivityThread.main(ActivityThread.java:5221)
在java.lang.reflect.Method.invoke(本地方法)
在java.lang.reflect .Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit .main(ZygoteInit.java:694)
导致:java.lang.InstantiationException:class com.universo91.towersrock.Pages.SplashScreenActivity没有零参数构造函数
at java.lang.Class.newInstance( Class.java:1563)
在android.app.Instrumentation.newActivity(Instrumentation.java:1065)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
在android .app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android.app.ActivityThread $ H.handleMessage(ActivityThread。 java:1278)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:135)
在android.app .ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by:java.lang.NoSuchMethodException:< init> []
at java.lang.Class.getConstructor(Class.java:531)
at java.lang.Class.getDeclaredConstructor(Class.java:510)
at java.lang.Class .newInstance(Class.java:1561)
在android.app.Instrumentation.newActivity(Instrumentation.java:1065)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1278)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:135)
android.app.ActivityThread.main(ActivityThread.java:5221)
在java.lang.reflect.Method.invoke(本地方法)
在java.lang.reflect.Method.invoke(Method.java :372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694 )
02-20 18:21:30.168 1690-1702 / com.universo91.towersrock I / art:后台粘性并发标记扫描GC释放1749(114KB)AllocSpace对象,0(0B)LOS对象,37% ,391KB / 623KB,暂停856us总计166.355ms
02-20 18:21:53.341 1690-1690 / com.universo91.towersrock I /过程:发送信号。 PID:1690 SIG:9
02-20 18:26:00.878 1754-1754 / com.universo91.towersrock D / AndroidRuntime:关闭VM
02-20 18:26:00.903 1754-1754 / com.universo91.towersrock E / AndroidRuntime:FATAL EXCEPTION:main
进程:com.universo91.towersrock,PID:1754
java.lang.RuntimeException:无法实例化活动ComponentInfo {com.universo91.towersrock / com.universo91.towersrock.Pages.SplashScreenActivity}:java.lang.IllegalStateException:Activity之前onCreate()不可用系统服务
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android.app.ActivityThread $ H.handleMessage ActivityThread.java:1278)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:135)
在android .app.ActivityThread.main(ActivityThread.java:5221)
在java.lang.reflect.Method.invoke(本地方法)
在java.lang.reflect.Method.invoke(Method.java: 372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by:java.lang.IllegalStateException:Activity在onCreate()之前不可用的系统服务
at android.app.Activity.getSystemService(Activity.java:4989)
at com.universo91 .towersrock.Pages.SplashScreenActivity。< init>(SplashScreenActivity.java:24)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class .java:1572)
在android.app.Instrumentation.newActivity(Instrumentation.java:1065)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
在android。 app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java :1278)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:135)
在android.app。 ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-20 18:26:01.144 1754-1766 / com.universo91.towersrock我/艺术:背景粘性并发标记扫描GC释放1745(118KB)AllocSpace对象,0(0B)LOS对象,38%免费,382KB / 623KB ,paused 950us total 131.218ms
02-20 18:26:04.429 1754-1754 / com.universo91.towersrock I /过程:发送信号。 PID:1754 SIG:9
在活动
的 onCreate()
方法中执行:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.cManager =(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
this.mTextView =(TextView)this.findViewById(R.id.mProgressText);
}
覆盖活动的构造函数
涉及相当多的重举,真的不是在公园散步。虽然你可以 [当然]有一个空的构造函数为活动
,它在Android框架的上下文是真的是多余的。 p>
相关答案:
1。 =http://stackoverflow.com/a/9138600/3287204> 为什么我无法将参数传递到Android Activity构造函数 。
2。 使用参数启动活动。
I noticed that using the shortcut Alt + Insert
and selecting the builders, it tries to create a constructor with each private property (e.g. cManager
and mTextView
). I remember I already created projects without it and worked correctly.
The error happens when I run the application, following the full logcat and the Activity
constructor:
Constructor with private property:
private ConnectivityManager cManager;
private TextView mTextView;
public SplashScreenActivity() {
this.cManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
this.mTextView = (TextView)this.findViewById(R.id.mProgressText);
}
Logcat:
02-20 18:20:56.155 1591-1591/com.universo91.towersrock I/art﹕ Not late-enabling -Xcheck:jni (already on)
02-20 18:20:58.355 1591-1591/com.universo91.towersrock D/AndroidRuntime﹕ Shutting down VM
--------- beginning of crash
02-20 18:20:58.361 1591-1591/com.universo91.towersrock E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.universo91.towersrock, PID: 1591
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.universo91.towersrock/com.universo91.towersrock.Pages.SplashScreenActivity}: java.lang.InstantiationException: class com.universo91.towersrock.Pages.SplashScreenActivity has no zero argument constructor
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.InstantiationException: class com.universo91.towersrock.Pages.SplashScreenActivity has no zero argument constructor
at java.lang.Class.newInstance(Class.java:1563)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NoSuchMethodException: <init> []
at java.lang.Class.getConstructor(Class.java:531)
at java.lang.Class.getDeclaredConstructor(Class.java:510)
at java.lang.Class.newInstance(Class.java:1561)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-20 18:20:58.772 1591-1603/com.universo91.towersrock I/art﹕ Background sticky concurrent mark sweep GC freed 1747(114KB) AllocSpace objects, 0(0B) LOS objects, 37% free, 391KB/623KB, paused 825us total 382.655ms
02-20 18:21:29.824 1690-1690/com.universo91.towersrock D/AndroidRuntime﹕ Shutting down VM
02-20 18:21:29.829 1690-1690/com.universo91.towersrock E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.universo91.towersrock, PID: 1690
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.universo91.towersrock/com.universo91.towersrock.Pages.SplashScreenActivity}: java.lang.InstantiationException: class com.universo91.towersrock.Pages.SplashScreenActivity has no zero argument constructor
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.InstantiationException: class com.universo91.towersrock.Pages.SplashScreenActivity has no zero argument constructor
at java.lang.Class.newInstance(Class.java:1563)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NoSuchMethodException: <init> []
at java.lang.Class.getConstructor(Class.java:531)
at java.lang.Class.getDeclaredConstructor(Class.java:510)
at java.lang.Class.newInstance(Class.java:1561)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-20 18:21:30.168 1690-1702/com.universo91.towersrock I/art﹕ Background sticky concurrent mark sweep GC freed 1749(114KB) AllocSpace objects, 0(0B) LOS objects, 37% free, 391KB/623KB, paused 856us total 166.355ms
02-20 18:21:53.341 1690-1690/com.universo91.towersrock I/Process﹕ Sending signal. PID: 1690 SIG: 9
02-20 18:26:00.878 1754-1754/com.universo91.towersrock D/AndroidRuntime﹕ Shutting down VM
02-20 18:26:00.903 1754-1754/com.universo91.towersrock E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.universo91.towersrock, PID: 1754
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.universo91.towersrock/com.universo91.towersrock.Pages.SplashScreenActivity}: java.lang.IllegalStateException: System services not available to Activities before onCreate()
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
at android.app.Activity.getSystemService(Activity.java:4989)
at com.universo91.towersrock.Pages.SplashScreenActivity.<init>(SplashScreenActivity.java:24)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1572)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-20 18:26:01.144 1754-1766/com.universo91.towersrock I/art﹕ Background sticky concurrent mark sweep GC freed 1745(118KB) AllocSpace objects, 0(0B) LOS objects, 38% free, 382KB/623KB, paused 950us total 131.218ms
02-20 18:26:04.429 1754-1754/com.universo91.towersrock I/Process﹕ Sending signal. PID: 1754 SIG: 9
All of your initializations should be performed in the onCreate()
method of your Activity
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.cManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
this.mTextView = (TextView)this.findViewById(R.id.mProgressText);
}
Overriding the constructor of Activity
involves quite a bit of heavy lifting, and is really not a walk in the park. Although you can [of course] have an empty constructor for an Activity
, it really is quite superfluous in the context of the Android framework.
Related answers:
1. Why I cannot pass parameters to Android Activity Constructor.
2. Start an Activity with a parameter.
这篇关于Android - Activity构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!