每当互联网连接可用时,我想下载一些数据,包括json和图像(二进制数据)。
我有一个完整的工作代码可以做到这一点。问题是我在自定义应用程序类中编写了该代码。下载并在本地保存。但是当应用程序启动时,互联网连接可能在那个时间点不可用。
所以我想做的是在检测到互联网连接时发送请求并下载数据,并通过在本地保存到内容提供商中来使用该数据。即使没有互联网连接,该应用程序也能正常运行。
我正在考虑使用广播接收器来下载它。但是,广播接收器下载数据将是一项繁重的任务。所以现在我发现的是我可以检查广播接收器中的互联网连接,我将从其他组件下载数据。这样做的最佳做法是什么?
即使应用程序未开启,广播接收器是否仍然存在?
答案 0 :(得分:4)
这样做的最佳做法是什么?
最好的方法是使用IntentService。
从BroadcastReceiver启动此服务。通过IntentService,所有请求都在一个工作线程上处理 - 它们可能需要多长时间(并且不会阻止应用程序的主循环),因此不必担心任务的持续时间。
即使应用程序未开启,广播接收器是否仍然存在?
是的,如果他们是通过清单注册的。
有用的资源
答案 1 :(得分:1)
在android开发者指南中提到你可以Monitor for Changes in Connectivity
1st - 您创建了一个BroadCastReceive的NetworkChangeReceiver类,您可以在其中实现代码以下载所需内容:
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo();
boolean isConnected = wifi != null &&
wifi.isConnected() ;
if (isConnected ) {
// Do something
Log.d("Netowk Available ", "Flag No 1");
}
}
}
第二 - 您在清单文件中注册了BroadCastReceiver
,如下所示:
<receiver android:name=".NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>