当前位置:首页 » 安卓系统 » androidservice网络

androidservice网络

发布时间: 2023-12-06 19:48:37

‘壹’ 请教android service ANR问题

ANR: 很多初入Android开发的网友可能发现ANR的字样,到底Android ANR是什么呢? 其实ANR就是Application Not Responding的全称,当某个应用处于长期假死状态时Android系统会弹出一个窗口上面写道,XXX is not responding给出两个按钮一个为force close一个为wait。 可能触发ANR的情况 1. 长时间的I/O处理,比如读写大文件,网络访问时造成的阻塞。 2. 执行耗时的运算,Android默认为超过5000ms即5秒开始弹出ANR窗口,某些应用可能首次执行时没有缓存十分耗时,可以通过Splash播放闪屏Logo等方式来延缓加载 3. Service和appWidget中也要注意多线程的使用,除非它和Activity工作在不同的进程。 避免ANR的方法 1. 单独开工作者线程,通过独立的Thread或使用类似AsyncTask的方式来处理耗时的内容。 2. 耗时的操作尽量分段处理,使用类似状态机的方法,类似Symbian的活动对象将一个复杂的事情,分段执行。 3. UI线程中不要处理过多的内容,比如将一个5MB的文本,让TextView去setText,要知道这种UI操作,没有什么好方法去解决的,所以Android123提示,遇到UI中需要执行复杂的操作,可以参考上面2提到的分段处理方式。

‘贰’ Android如何获取网络连接状态及怎样调用网络配置界面

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetManager {
Context context;

public NetManager(Context context) {
this.context = context;
}

// 判断网络是否可用的方法
public boolean isOpenNetwork() {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
return false;
}

// 判断WIFI网络是否可用的方法
public boolean isOpenWifi() {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return mWifi.isConnected();
}
}

public static void netManager(final Context a) {
netManager = new NetManager(a);

if (!netManager.isOpenNetwork()) {
// 如果网络不可用,则弹出对话框,对网络进行设置
Builder builder = new Builder(a);
builder.setTitle("没有可用的网络");
builder.setMessage("是否对网络进行设置?");
builder.setPositiveButton("确定",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
try {

String sdkVersion = android.os.Build.VERSION.SDK;
if (Integer.valueOf(sdkVersion) > 10) {
intent = new Intent(
android.provider.Settings.ACTION_WIRELESS_SETTINGS);
} else {
intent = new Intent();
ComponentName comp = new ComponentName(
"com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(comp);
intent.setAction("android.intent.action.VIEW");
}
a.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
});
builder.setNegativeButton("取消",
null);
builder.show();
}else {
Toast.makeText(a, "网络不给力,请确认您的网络连接", Toast.LENGTH_LONG).show();
}
}
转载,仅供参考。

‘叁’ Android将所有网络请求及逻辑都放在Service中处理是否合适

不太合适,所有的都写在一个地方,显得代码臃肿,不好维护,最好分层():网络请求只负责请求数据(c),对于数据处理的逻辑判断,放到逻辑层(m),然后,对于页面展示的放到activity里面刷新视图即可,这里只负责接收数据后刷新界面,不做任何判断逻辑(v)。。。相当于mvc模式。

热点内容
特斯拉在哪里输入密码 发布:2025-01-23 04:05:29 浏览:205
影视脚本创作 发布:2025-01-23 04:00:39 浏览:844
cmd脚本执行sql脚本 发布:2025-01-23 03:46:51 浏览:115
搭建100人的游戏服务器 发布:2025-01-23 03:37:43 浏览:517
b站台解析服务器ip 发布:2025-01-23 03:36:12 浏览:203
安卓手机在哪里看港剧 发布:2025-01-23 03:35:30 浏览:52
黑漫的服务器ip 发布:2025-01-23 03:16:40 浏览:651
tplink无internet访问 发布:2025-01-23 03:15:18 浏览:567
原神用安卓手机玩为什么画质那么低 发布:2025-01-23 03:09:31 浏览:848
空调压缩机是外机吗 发布:2025-01-23 03:09:31 浏览:951