无法运行非活动类中的活动

时间:2018-09-26 13:49:15

标签: android class android-activity android-workmanager

我正在尝试从Worker Class运行一个活动。

public class MyWorker extends Worker {

private final Context context;

public MyWorker(Context context) {
    this.context = context;
}


@NonNull
@Override
public Result doWork() {
    new Thread() {
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {

                    Intent i1 = new Intent (context, DDBMain.class);
                    i1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(i1);
                }
            });
        }
    }.start();

    return Result.SUCCESS;
}
} 

我收到此错误:

E/WorkerWrapper: Trouble instantiating com.simran.powermanagement.MyWorker
java.lang.InstantiationException: 
java.lang.Class<com.simran.powermanagement.MyWorker> has no zero argument 
constructor

2 个答案:

答案 0 :(得分:0)

您的代码有很多问题。

切换到新的构造函数,该构造函数接受ContextWorkerParameters并调用super(context, params)

如果您只需要一个context,则getApplicationContext上已经有一个Worker API。

答案 1 :(得分:0)

我建议您看看WorkManager documentation和可用的WorkManager codelab

在这种情况下,您可以尝试以下操作:

public class MyWorker() extends Worker {

    public MyWorker(@NonNull Context appCtx, @NonNull WorkerParameters params) {
        super(appCtx, params);
    }

    @NonNull
    @Override
    public Result doWork() {
        new Thread() {
            public void run() {
                runOnUiThread(new Runnable() {
                    public void run() {
                        Intent i = new Intent (getApplicationContext(), DDBMain.class);
                        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(i);
                    }
                });
            }
        }.start();

        return Result.SUCCESS;
    }
}

使用getApplicationContext()基类中可用的Worker方法访问应用程序上下文。最好使用WorkManager 1.0.0-alpha09中引入的新构造函数语法,因为较旧的构造函数已弃用,以后将被删除。