我正在尝试从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
答案 0 :(得分:0)
您的代码有很多问题。
切换到新的构造函数,该构造函数接受Context
和WorkerParameters
并调用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中引入的新构造函数语法,因为较旧的构造函数已弃用,以后将被删除。