从Android源码中看到的一段比较牛逼的代码,记录下来,以后用到了直接可以使用

1、线程等待超时处理逻辑

private static final class BlockingRunnable implements Runnable {
        private final Runnable mTask;
        private boolean mDone;

        public BlockingRunnable(Runnable task) {
            mTask = task;
        }

        @Override
        public void run() {
            try {
                mTask.run();
            } finally {
                synchronized (this) {
                    mDone = true;
                    notifyAll();
                }
            }
        }

        public boolean postAndWait(Handler handler, long timeout) {
            if (!handler.post(this)) {
                return false;
            }

            synchronized (this) {
                if (timeout > 0) {
                    final long expirationTime = SystemClock.uptimeMillis() + timeout;
                    while (!mDone) {
                        long delay = expirationTime - SystemClock.uptimeMillis();
                        if (delay <= 0) {
                            return false; // timeout
                        }
                        try {
                            wait(delay);
                        } catch (InterruptedException ex) {
                        }
                    }
                } else {
                    while (!mDone) {
                        try {
                            wait();
                        } catch (InterruptedException ex) {
                        }
                    }
                }
            }
            return true;
        }
    }

2、单例模式

package android.util;

/**
 * Singleton helper class for lazily initialization.
 *
 * Modeled after frameworks/base/include/utils/Singleton.h
 *
 * @hide
 */
public abstract class Singleton<T> {
    private T mInstance;

    protected abstract T create();

    public final T get() {
        synchronized (this) {
            if (mInstance == null) {
                mInstance = create();
            }
            return mInstance;
        }
    }
}

使用方式如下:

    private static final Singleton<IActivityManager> IActivityManagerSingleton =
            new Singleton<IActivityManager>() {
                @Override
                protected IActivityManager create() {
                    final IBinder b = ServiceManager.getService(Context.ACTIVITY_SERVICE);
                    final IActivityManager am = IActivityManager.Stub.asInterface(b);
                    return am;
                }
            };

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你想在 Android 修改设备从 4G 连接上 WiFi 之后仍然使用 4G 网络,你可以这样做: 1. 首先,打开 Android 码目录下的 `frameworks/base/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java` 文件。 2. 找到 `mNetworkMisc` 变量,这是一个 `NetworkMisc` 类型的对象,它用于存储网络的杂项信息。 3. 在 `mNetworkMisc` 变量查找 `explicitlySelected` 字段。这是一个布尔值,用于标识网络是否是用户手动选择的。 4. 修改 `explicitlySelected` 字段的值为 `false`,表示网络不是用户手动选择的,这样系统就不会在连接 WiFi 的同时断开 4G 网络了。 5. 编译并重新安装系统,修改生效。 注意:修改系统码需要一定的技术知识,如果你不熟悉系统开发,建议不要尝试修改系统码,以免造成系统故障。 ### 回答2: 在Android修改设备从4G连接上WiFi之后仍然使用4G网络可以通过以下步骤实现: 1. 打开Android码工程,进入framework层的码目录。 2. 找到ConnectivityManager类,在该类可以找到处理网络连接的相关方法。 3. 在该类,可以找到一个叫做setNetworkPreference()的方法,该方法用于设置网络连接偏好。 4. 调用setNetworkPreference()方法,将网络连接偏好设置为4G网络。 5. 在确认设备已连接上WiFi网络之后,即可执行网络连接偏好的设置。 下面是一段示例代码,用于在设备连接上WiFi之后将网络连接偏好设置为4G网络: ``` ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // 确保设备已连接上WiFi网络 if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) { try { Method setNetworkPreferenceMethod = connectivityManager.getClass().getMethod("setNetworkPreference", int.class); setNetworkPreferenceMethod.invoke(connectivityManager, ConnectivityManager.TYPE_MOBILE); } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { e.printStackTrace(); } } ``` 请注意,上述代码仅供参考,具体实现可能因Android版本和设备型号而有所差异。此外,在修改码之前应该仔细了解相关的Android网络连接机制和权限控制,以避免不必要的问题和风险。 ### 回答3: 在Android,设备连接到4G网络后,如果希望设备继续使用4G网络而不切换到WiFi网络,可以通过以下步骤进行修改: 1. 打开Android码,找到`ConnectivityManager`类。该类主要负责管理设备的网络连接。 2. 在`ConnectivityManager`类,找到`setWifiEnabled`方法。这个方法用于控制设备的WiFi网络开关。 3. 在该方法,可以通过添加一些逻辑来禁止设备在连接上WiFi之后切换到WiFi网络。可以使用`setWifiEnabled(false)`来关闭WiFi连接,确保设备仍然使用4G网络。 4. 将修改后的码编译并部署到设备上进行测试。请注意,在修改Android码之前,务必备份原始码,并且在进行任何修改之前,需要对码有一定的了解和经验。 需要特别说明的是,修改设备在连接上WiFi之后仍然使用4G网络可能会导致额外的数据流量消耗和费用增加。因此,在进行这样的修改之前,请确保理解风险并权衡利弊。此外,这种修改可能需要特定权限或者设备的root权限才能生效。请谨慎操作,确保对设备的修改符合相关法律法规和规定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值