*
* @deprecated Use the standard <code>java.util.concurrent</code> or
* <a href="https://developer.android.com/topic/libraries/architecture/coroutines">
* Kotlin concurrency utilities</a> instead.
*/
@Deprecated
public abstract class AsyncTask<Params, Progress, Result> {
private static class LongRunningTask extends AsyncTask<String, Void, MyPojo> {
private static final String TAG = MyActivity.LongRunningTask.class.getSimpleName();
private WeakReference<MyActivity> activityReference;
LongRunningTask(MyActivity context) {
activityReference = new WeakReference<>(context);
}
@Override
protected MyPojo doInBackground(String... params) {
// Some long running task
}
@Override
protected void onPostExecute(MyPojo data) {
MyActivity activity = activityReference.get();
activity.progressBar.setVisibility(View.GONE);
populateData(activity, data) ;
}
}
private WeakReference<MyActivity> activityReference;
很好地消除了它不被推荐的问题,因为WeakReference
总是一个黑客,不是一个合适的解决方案。
现在人们将有机会对他们的代码进行消毒。
AsyncTask<String, Void, MyPojo>
基于此代码,实际上不需要progress
,并且有一个string
input+mypojo
输出。
public class TaskRunner {
private final Executor executor = Executors.newSingleThreadExecutor(); // change according to your requirements
private final Handler handler = new Handler(Looper.getMainLooper());
public interface Callback<R> {
void onComplete(R result);
}
public <R> void executeAsync(Callable<R> callable, Callback<R> callback) {
executor.execute(() -> {
final R result = callable.call();
handler.post(() -> {
callback.onComplete(result);
});
});
}
}
class LongRunningTask implements Callable<MyPojo> {
private final String input;
public LongRunningTask(String input) {
this.input = input;
}
@Override
public MyPojo call() {
// Some long running task
return myPojo;
}
}
// in ViewModel
taskRunner.executeAsync(new LongRunningTask(input), (data) -> {
// MyActivity activity = activityReference.get();
// activity.progressBar.setVisibility(View.GONE);
// populateData(activity, data) ;
loadingLiveData.setValue(false);
dataLiveData.setValue(data);
});
// in Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.loadingLiveData.observe(this, (loading) -> {
if(loading) {
progressBar.setVisibility(View.VISIBLE);
} else {
progressBar.setVisibility(View.GONE);
}
});
viewModel.dataLiveData.observe(this, (data) -> {
populateData(data);
});
}
private static final Executor THREAD_POOL_EXECUTOR =
new ThreadPoolExecutor(5, 128, 1,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
因此,我的问题是:为什么还没有被否决?如果核心Java团队已经决定它是坏的,那么他们一定也考虑过弃用。他们反对这样做的理由是什么(在Java8中,它仍然没有被反对)?
编辑 认真地看一下切换你的电话和东西来改造。挺漂亮的。我很高兴我做了。有几个障碍,但很酷。
有人知道是什么取代了Amazon DynamoDBClient吗?在留档里什么都找不到 包-com。亚马逊。服务。发电机BV2
我知道苹果发布了基于蓝牙4.0协议的iBeacon。 在任何蓝牙设备中,如果我们使用以下代码对设备进行编码: 表示呈现此蓝牙设备是iBeacon蓝牙设备。 我的问题是,如果我定义了自己的协议,这意味着我会改变它 是否有一种可能性,我可以通过iphone识别我自己定义的蓝牙设备,而无需在iphone上添加识别设备。 苹果是否支持定制ibeacon? 编辑根据davidgyoung所说,我对stack
我使用了org.springframework.cloud.sleuth。Tracer(1.3.x)获取当前跨度和跟踪ID。看起来spring cloud sleuth core的2.x版本摆脱了它,经过大量搜索,没有明显的替代品。请帮忙。
问题内容: 如果我使用Oracle,则有一个可用于创建层次查询的关键字。当前,我在一个项目上使用MySQL,我想知道MySQL中是否有替代方法? 我尝试谷歌,但无济于事。我想要实现的是通过一个查询从数据库中获取一棵树。涉及两个表: 和。后者包含两个ID,一个是,另一个是。因此,它基本上是一个自联接,我可以使用该模型创建图。实际上,它目前仅用于创建树,但是将来可能会改变。但无论哪种情况,我都想拥有的