不推荐使用 AsyncTask 的 Xamarin 开发
Xamarin development with AsyncTask being deprecated
我们正处于启动移动应用程序项目的边缘,利用我们的 Microsoft 堆栈,我们希望使用 Xamarin
开发我们的应用程序,更准确地说,Xamarin.Android
和 Xamarin.IOS
(所以不是表格)。
由于我们目前对 Xamarin 的总体了解非常有限,我想知道 AsyncTask
的弃用会对 Xamarin 开发产生什么影响。据我所知,Xamarin 和 .NET 严重依赖于使用 AsyncTask
?
我知道弃用并不意味着它不可用或无法使用,但考虑到未来的发展,转向 Xamarin 开发是否明智?
TL;DR:
现在 AsyncTask
已弃用,Xamarin 开发人员是否应该担心?
你是说 Android.OS.AsyncTask
的 AsyncTask 吗?
AsyncTask
和Task
与System.Threading.Tasks
有很大区别。
AsyncTask 仅在 Android 上可用,而 Task 已融入 .NET。 System.Threading.Task
无处不在,是编写异步代码的好方法。
带有 AsyncTask
的代码看起来像:
public class MyTask : AsyncTask
{
protected override void OnPreExecute()
{
}
protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] @params)
{
SomeMethodRunningAsync();
}
protected override void OnPostExecute(Java.Lang.Object result)
{
}
}
虽然使用 Task
的代码看起来更像:
public async Task DoStuffInBackground()
{
await SomeMethodRunningAsync();
}
我非常怀疑您是否在使用 AsyncTask
,除非您移植了一些 Java 代码或将一些代码示例从 Java 转换为 C#。
简答:没有。
长答案:Xamarin 可以使用本机 APIs(平台相关)和 .NET APIs(平台无关)。如果您的应用程序使用本机 APIs,您可以做本机开发人员可以用它们做的任何事情,但它们只能在一个平台上工作。如果他们被弃用,您将处于与任何本地开发人员相同的位置(通常有解决方法/新 API)。 .NET APIs 永远不会被弃用,因为 Xamarin 的工作是实施它们并在它们使用已弃用的东西时让它们继续工作,并且 .NET 不可能无法实施,这只是一个需要付出努力的问题.说清楚,你说的是原生API的变化,问是否影响.NETAPI。正如上面所讨论的,理论上它可能会发生,但我认为这样的问题从未发生过,这听起来一点也不麻烦。
我们正处于启动移动应用程序项目的边缘,利用我们的 Microsoft 堆栈,我们希望使用 Xamarin
开发我们的应用程序,更准确地说,Xamarin.Android
和 Xamarin.IOS
(所以不是表格)。
由于我们目前对 Xamarin 的总体了解非常有限,我想知道 AsyncTask
的弃用会对 Xamarin 开发产生什么影响。据我所知,Xamarin 和 .NET 严重依赖于使用 AsyncTask
?
我知道弃用并不意味着它不可用或无法使用,但考虑到未来的发展,转向 Xamarin 开发是否明智?
TL;DR:
现在 AsyncTask
已弃用,Xamarin 开发人员是否应该担心?
你是说 Android.OS.AsyncTask
的 AsyncTask 吗?
AsyncTask
和Task
与System.Threading.Tasks
有很大区别。
AsyncTask 仅在 Android 上可用,而 Task 已融入 .NET。 System.Threading.Task
无处不在,是编写异步代码的好方法。
带有 AsyncTask
的代码看起来像:
public class MyTask : AsyncTask
{
protected override void OnPreExecute()
{
}
protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] @params)
{
SomeMethodRunningAsync();
}
protected override void OnPostExecute(Java.Lang.Object result)
{
}
}
虽然使用 Task
的代码看起来更像:
public async Task DoStuffInBackground()
{
await SomeMethodRunningAsync();
}
我非常怀疑您是否在使用 AsyncTask
,除非您移植了一些 Java 代码或将一些代码示例从 Java 转换为 C#。
简答:没有。
长答案:Xamarin 可以使用本机 APIs(平台相关)和 .NET APIs(平台无关)。如果您的应用程序使用本机 APIs,您可以做本机开发人员可以用它们做的任何事情,但它们只能在一个平台上工作。如果他们被弃用,您将处于与任何本地开发人员相同的位置(通常有解决方法/新 API)。 .NET APIs 永远不会被弃用,因为 Xamarin 的工作是实施它们并在它们使用已弃用的东西时让它们继续工作,并且 .NET 不可能无法实施,这只是一个需要付出努力的问题.说清楚,你说的是原生API的变化,问是否影响.NETAPI。正如上面所讨论的,理论上它可能会发生,但我认为这样的问题从未发生过,这听起来一点也不麻烦。