【问题标题】:Android don't launch default activity (MainActivity)Android 不启动默认活动 (MainActivity)
【发布时间】:2017-09-22 15:08:02
【问题描述】:

我有一个非常简单的小部件应用程序,只有一个活动 (MainActivity)。 一开始我从 BlankActivity 模板创建了 MainActivity。稍后我用组件填充它,并将其添加到 AndroidManifest。

问题是 Android 不启动 Activity(唯一的一个)。

应用启动时我看到的是白色空白视图(顶部栏带有应用名称)。

我设置了一个断点,但在调试过程中没有到达它。

我尝试将 DEFAULT 类别设置为 MainActivity 并且没有它:

<category android:name="android.intent.category.DEFAULT"/>

我尝试将完整或短路径放入主要活动:

android:name="pl.test.firstwidget.view.MainActivity"

android:name=".view.MainActivity"

我确定我的 MainActivity 在视图包中。

  • 我尝试从模拟器中卸载应用程序,然后重新安装应用程序,但没有帮助。
  • 我已尝试将应用安装到另一个模拟器 - 没有成功
  • 我已尝试将应用安装到手机 - 没有成功。
  • 我尝试清理并重建我的项目 - 没有成功。
  • 我尝试在我的 AndroidStudio 运行配置中设置 DefaultActivity - 没有成功。
  • 我尝试在运行配置中设置指定的活动 (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'
}

有人看到我做错了吗?

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    您需要覆盖 public void onCreate(Bundle savedInstanceState) 而不是 public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState),后者旨在让 api 21+ 在重新启动时保持您的活动状态

    注意与 onCreate(android.os.Bundle) 相同,但需要那些 将属性 persistableMode 设置为 persistAcrossReboots 创建的活动(在清单中,否则它不会被调用,因此为空视图)

    关于 PersistableBundle

    如果活动正在进行 在先前被关闭或断电后重新初始化然后 此 Bundle 包含它最近提供给的数据 onSaveInstanceState(Bundle) 中的 outPersistentState。注意:否则它 为空。

    所以用

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState, persistentState);
        setContentView(R.layout.activity_main);
    
        ButterKnife.bind(this);
        fillView();
    }
    

    【讨论】:

    • 您的意思是,它不会从 Android Studio 启动,或者当您单击主屏幕上的图标时。
    • @PedroVarela op 说What I see when app started is white blank view 让我添加更多链接(现在收集它们)和信息
    • 移除黄油刀
    • 天哪……谢谢!我从 onCreate 方法中删除了一个参数,这很有帮助!写的时候好像很简单..
    • @mariachi Android 框架通常有不同的构造函数,请仔细阅读它们,因为会发生这种情况。
    【解决方案2】:

    好像没什么问题。

    1. 清单中不需要android.intent.category.DEFAULT,只需android.intent.action.MAINandroid.intent.category.LAUNCHER 就可以了

    2. 如果您正在开始 Android 开发,请暂时删除对 butterKnife 的所有引用并且不要使用它;只是为了验证它是否运行。

    3. 按照 Pavneet_Singh 的回答更改您的 onCreate 方法,但不要使用该超级方法,只需使用:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.id.activity_main);
        // ..code
    }
    

    【讨论】:

    • Ad.1 我试过了 - 没有成功。广告 2。我没有开始,只是获取了奇怪的问题...... ButterKnife 不影响问题。广告 3。 Pavneet_Singh 提示帮助谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-08-28
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2017-01-08
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多