我得到以下完整的错误消息:输入调度超时(等待发送非键事件,因为触摸的窗口尚未完成处理超过500.0ms前传递给它的某些输入事件.等待队列长度:2.等待队列头年龄:9379.7ms.)
请参阅下面的代码+跟踪.似乎锁定发生在GetIP_WAN.java:32,这是一行:
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
Run Code Online (Sandbox Code Playgroud)
每当我检测到网络更改wifi-3g/4g-没有互联网时,我都会调用此功能.在其他一些地方.它发生在每一个场合,但更多来自网络变化检测显然.
我验证公共IP是否已经改变了这种方式:
ipwan = giw.getWanIpAddress();
Run Code Online (Sandbox Code Playgroud)
在getWanIpAddress中:
ipwan = new GetIP_WAN().execute().get();
Run Code Online (Sandbox Code Playgroud)
ipwan是指向公共IP的String.
我无法重现这个ANR.
我的应用程序使用几个异步任务,可能是几秒钟的密集异步任务.如果我用强负载测试它,我关掉wifi我没有问题.
输入将非常感谢!!!
public class GetIP_WAN extends AsyncTask<Void, Integer, String> {
@Override
protected String doInBackground(Void... params) {
URL url;
String ipwan = null;
try {
// get URL content
url = new URL("http://ipv4bot.whatismyipaddress.com/");
URLConnection conn = url.openConnection();
conn.setConnectTimeout(3000);
// open the stream and put it into BufferedReader
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String inputLine;
ipwan = br.readLine();
br.close(); …Run Code Online (Sandbox Code Playgroud) 我的小部件应用程序在除了8 Oreo之外的所有Android版本上运行良好.我收到一条W/BroadcastQueue: Background execution not allowed: receiving Intent消息.
CommonsWare有一个有趣的博客,但我不完全理解为什么它适用于我的情况. https://commonsware.com/blog/2017/04/11/android-o-implicit-broadcast-ban.html
我的情况看起来非常简单:我有一个带按钮的小部件,我想在单击时更改文本按钮.
解决此问题的正确方法是什么?
TestWidget.java
public class TestWidget extends AppWidgetProvider {
private static RemoteViews views;
private static boolean buttonClicked = false;
public static final String ACTION_AUTO_UPDATE = "AUTO_UPDATE";
@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);
if(intent.getAction().equals(ACTION_AUTO_UPDATE))
{
Log.i("TESTWID", "get onReceive");
}
}
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
views = new RemoteViews(context.getPackageName(), R.layout.test_widget);
views.setOnClickPendingIntent(R.id.wid_btn_tst, setButton(context));
appWidgetManager.updateAppWidget(appWidgetId, views);
}
@Override
public void onUpdate(Context context, AppWidgetManager …Run Code Online (Sandbox Code Playgroud) 我在无法复制的产品中崩溃了。跟踪没有说明崩溃的位置。进行一些搜索后,看起来它可能与notifyDataSetChanged()有关。它发生在Android 6和7上。
我有2个使用listview的软件包:
BroadcastReceiver检查wifi AP的列表:在这种情况下,代码将收集所有AP,将它们添加到List中并调用notifyDataSetChanged:
@Override
public void onReceive(Context context, Intent intent) {
if (wifiManager != null) {
if (wifiManager.isWifiEnabled()) {
List<ScanResult> listeScan = wifiManager.getScanResults();
listeWifiItem.clear();
for (ScanResult scanResult : listeScan) {
WifiItem item = new WifiItem();
item.setAdresseMac(scanResult.BSSID);
item.setAPName(scanResult.SSID);
item.setForceSignal(scanResult.level);
listeWifiItem.add(item);
}
wifiAdapter.notifyDataSetChanged();
} else {
Toast.makeText(context, "You must activate the WiFi", Toast.LENGTH_SHORT);
}
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个异步任务,其中我在onPostExecute方法中调用notifyDataSetChanged:
@Override
protected void onPostExecute(Void result) {
iPadaptater.notifyDataSetChanged();
super.onPostExecute(result);
}
Run Code Online (Sandbox Code Playgroud)
我使用notifyDataSetChanged的方式是否有问题?在异步任务中,如果用户转到其他功能,我认为这样做更安全
您是否认为崩溃与notifyDataSetChanged有关?
您是否从痕迹中看到另一个重要信息?
这是两种跟踪类型:
类型1:
java.lang.IllegalStateException:
at android.widget.ListView.layoutChildren (ListView.java:1747)
at android.widget.AbsListView$CheckForTap.run (AbsListView.java:4728)
at android.os.Handler.handleCallback …Run Code Online (Sandbox Code Playgroud) 我有一个小部件,它实现了一个特定的广播接收器服务,以检测WiFi连接何时关闭.
如果主要活动正在运行,它将完美运行.
我遇到的问题是当我停止主要活动然后广播接收器服务停止,因为我不再检测到wifi的变化.
有没有办法在主要活动中幸存的启动服务?
如果没有,还有其他机制吗?
我有一个数字EditText的fragment显示键盘为正常,当我选择EditText.我想在输入OK时隐藏键盘.所以我使用了hide_keyboard()函数,它正常工作.
我遇到的问题是当我重新选择时EditText,软键盘不再出现了.我尝试过很多东西,但都没有用.
有任何想法吗?
这是我的EditText:
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="7"
android:id="@+id/kip_time"
android:hint="Reflexion time"
android:layout_below="@+id/chronometer_kipling"
android:layout_alignStart="@+id/chronometer_kipling"
android:layout_marginTop="10dp"
/>
Run Code Online (Sandbox Code Playgroud)
和我的hide_keyboard()函数:
private void hide_keyboard(Context context, View view) {
InputMethodManager inputManager = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput(0, 0);
}
Run Code Online (Sandbox Code Playgroud)
最后我的onclicklistener方法:
kip_time.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
reflexion_time = Integer.parseInt(kip_time.getText().toString());
reflexion_time = reflexion_time * 1000;
hide_keyboard(context, view);
}
});
Run Code Online (Sandbox Code Playgroud) 我是 SAF 的初学者。我想要做的是保存配置超级简单。假设文件是 .conf。
我将 .conf 复制到 conf.txt 并将其保存在 Drive 上。
这是我的代码:
tools.deleteFile(dst); // delete conf.txt if it exists
int res = tools.copyFile(src,dst); // copy .conf to conf.txt
if(res == -1) return;
tools.viewFile(dst);
// verify in Log info that the content of cnf.txt is correct
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TITLE, dst);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我在云端硬盘中保存。该文件出现在我的电脑上,但当我打开它时,它是空的。
当我做相反的事情时:ACTION_OPEN_DOCUMENT
public void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
Uri uri;
if (resultCode == Activity.RESULT_OK){
if (requestCode == 30){
if (resultData != null) …Run Code Online (Sandbox Code Playgroud) 我可以假设 /proc/net/tcp 是所有 /proc/pid/net/tcp 的总和吗?如果不是,有什么区别?根/系统 tcp 会话是否单独管理?