小编nar*_*arb的帖子

由输入调度导致的ANR超时 - 在尝试获取我的公共IP地址时

我得到以下完整的错误消息:输入调度超时(等待发送非键事件,因为触摸的窗口尚未完成处理超过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)

multithreading android httpconnection android-anr-dialog

9
推荐指数
1
解决办法
2万
查看次数

小部件案例不适用于Oreo 8.1 - 收到的消息:W/BroadcastQueue:不允许后台执行:接收Intent

我的小部件应用程序在除了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)

android android-widget

8
推荐指数
1
解决办法
2199
查看次数

崩溃:android.widget.ListView.layoutChildren中的java.lang.IllegalStateException

我在无法复制的产品中崩溃了。跟踪没有说明崩溃的位置。进行一些搜索后,看起来它可能与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)

crash android listview

7
推荐指数
1
解决办法
1501
查看次数

为什么我的小部件广播接收器服务在主应用程序停止时停止

我有一个小部件,它实现了一个特定的广播接收器服务,以检测WiFi连接何时关闭.

如果主要活动正在运行,它将完美运行.

我遇到的问题是当我停止主要活动然后广播接收器服务停止,因为我不再检测到wifi的变化.

有没有办法在主要活动中幸存的启动服务?

如果没有,还有其他机制吗?

service android widget broadcastreceiver android-widget

5
推荐指数
1
解决办法
352
查看次数

如何在EditText上的OK键上隐藏软键盘并再次显示

我有一个数字EditTextfragment显示键盘为正常,当我选择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)

keyboard android android-edittext

3
推荐指数
2
解决办法
3750
查看次数

SAF - ACTION_CREATE_DOCUMENT - 将文件保存到 Drive 后,文件为空

我是 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)

android storage-access-framework

2
推荐指数
1
解决办法
1762
查看次数

/proc/net/tcp 和 /proc/pid/net/tcp 有什么区别

我可以假设 /proc/net/tcp 是所有 /proc/pid/net/tcp 的总和吗?如果不是,有什么区别?根/系统 tcp 会话是否单独管理?

linux networking android

0
推荐指数
1
解决办法
843
查看次数