无法从非活动类运行活动



>我正在尝试从工人类运行活动。

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

你的代码有很多问题。

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

如果您只需要一个context那么Worker上已经有一个getApplicationContextAPI。

我建议你看看WorkManager文档和可用的WorkManager代码实验室

。在这种特殊情况下,您可以尝试如下操作:

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;
}
}

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

最新更新