![](/img/trans.png)
[英]Is it possible that Android App will not launch the MainActivity?
[英]Android don't launch default activity (MainActivity)
我有一个非常简单的窗口小部件应用程序,其中只有一个活动(MainActivity)。 从一开始,我就从BlankActivity模板创建了MainActivity。 稍后我用组件填充了它,并将其添加到AndroidManifest中。
问题是Android不会启动活动 (唯一的活动 )。
应用启动时我看到的是白色空白视图(带有带有应用名称的顶部栏)。
我已经设置了一个断点,并且在调试过程中没有到达断点。
我试图将DEFAULT类别设置为MainActivity,并且没有它:
<category android:name="android.intent.category.DEFAULT"/>
我尝试将主要活动的完整路径或简短路径:
android:name="pl.test.firstwidget.view.MainActivity"
android:name=".view.MainActivity"
我确定我的MainActivity在视图包中。
AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pl.test.firstwidget"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".view.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<receiver android:name=".view.MyWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info" />
</receiver>
</application>
</manifest>
MainActivity.java:
package pl.test.firstwidget.view;
(...)
public class MainActivity extends AppCompatActivity {
@BindView(R.id.ordersNumber) TextView ordersNumber;
@BindView(R.id.ordersValue) TextView ordersValue;
@BindView(R.id.lastUpdate) TextView lastUpdate;
@BindView(R.id.refreshButton) TextView refreshButton;
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
fillView();
}
private void fillView() {
//empty so far
}
@OnClick(R.id.refreshButton)
public void refresh() {
//empty so far
}
}
build.gradle
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId 'pl.test.firstwidget'
minSdkVersion 15
targetSdkVersion 25
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'
compile group: 'joda-time', name: 'joda-time', version: '2.9.9'
compile 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
}
有人看到我做错了吗?
您需要覆盖public void onCreate(Bundle savedInstanceState)
而不是public void onCreate(Bundle savedInstanceState,PersistableBundlepersistentState) ,这是为了让API 21+在重新启动后保持活动状态
注意与onCreate(android.os.Bundle)相同,但是调用了那些将属性persistableMode设置为persistentAcrossReboots创建的活动(在清单中否则将不被调用,因此为空视图)
关于PersistableBundle
如果活动在先前关闭或关闭电源后正在重新初始化,则此捆绑包将其最近提供给onSaveInstanceState(Bundle)中的outPersistentState的数据。 注意:否则为null。
所以用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
fillView();
}
看来没有错。
你不需要android.intent.category.DEFAULT
在清单,只是android.intent.action.MAIN
和android.intent.category.LAUNCHER
应该工作
如果您现在开始Android开发,请删除所有关于butterKnife的引用,并且不要使用它。 只是为了验证它是否运行。
更改您的onCreate
方法,如Pavneet_Singh回答,但不要使用该超级方法,只需使用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.activity_main);
// ..code
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.