小编you*_*udj的帖子

启用wifi且WifiManager.EXTRA_WIFI_STATE不可用时,android.net.wifi.STATE_CHANGE不广播

表现:

<receiver android:name=".triggers.WifiTrigger">
        <intent-filter>
            <action android:name="android.net.wifi.STATE_CHANGE" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
Run Code Online (Sandbox Code Playgroud)

当WiFi禁用,连接或断开连接(未检查连接/禁用/启用)时执行接收器,但是启用WiFi时不会触发接收器,此外WifiManager.EXTRA_WIFI_STATE,在意图上还没有其他功能,我正在使用:

public class WifiTrigger extends BroadcastReceiver {
    ...
    @Override
public void onReceive(Context context, Intent intent) {
    SharedPreferences preferences= PreferenceManager.getDefaultSharedPreferences(context);

    int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
    int previousWifiState = intent.getIntExtra(WifiManager.EXTRA_PREVIOUS_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
    log("p"+previousWifiState);
    log("c"+wifiState);
    //log is a defined method used for logging (it just …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-intent wifimanager

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

在大多数情况下,是什么让 Jsoup 比 HttpURLConnection 和 HttpClient 更快

我想比较标题中提到的三种实现的性能,我写了一个小 JAVA 程序来帮助我做到这一点。main 方法包含三个测试块,每个块看起来像这样:

        nb=0; time=0;
        for (int i = 0; i < 7; i++) {
            double v = methodX(url);
            if(v>0){
                nb++;
                time+=v;
            }
        }
        if(nb==0) nb=1;
        System.out.println("HttpClient : "+(time/ ((double) nb))+". Tries "+nb+"/7");
Run Code Online (Sandbox Code Playgroud)

变量nb用于避免失败的请求。现在方法methodX是以下之一:

    private static double testWithNativeHUC(String url){
        try {
            HttpURLConnection httpURLConnection= (HttpURLConnection) new URL(url).openConnection();
            httpURLConnection.addRequestProperty("User-Agent", UA);
            long before = System.currentTimeMillis();
            BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
            while (bufferedReader.readLine()!=null);
            return System.currentTimeMillis()-before;
        } catch (IOException e) {
            e.printStackTrace();
            return -1;
        }
    }

    private static double testWithHC(String …
Run Code Online (Sandbox Code Playgroud)

java optimization httpclient httpurlconnection jsoup

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

Java 在类中创建的线程中使用 this 关键字

我有一些这样的代码:

class MyClass{
    final ArrayList<Thread> list= new ArrayList<>();
    for(int i=0;i<N;i++)
        new Thread(()->{
            //more instructions...
            list.remove(this);
        }).start();
}
Run Code Online (Sandbox Code Playgroud)

问题是关于 IntelliJ 为指示list.remove(list);我显示的警告:ArrayList<Thread> may not contains objects of type MyClass

是 IntelliJ 的错误分析,还是this我的场景中的关键字引用了封闭类MyClass

java this

-1
推荐指数
1
解决办法
267
查看次数