表现:
<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) 我想比较标题中提到的三种实现的性能,我写了一个小 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) 我有一些这样的代码:
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
?