diff --git a/winboll/build.properties b/winboll/build.properties index a6a3330..b17d64c 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Dec 05 11:57:23 GMT 2025 +#Fri Dec 05 12:58:53 GMT 2025 stageCount=6 libraryProject= baseVersion=15.11 publishVersion=15.11.5 -buildCount=17 +buildCount=20 baseBetaVersion=15.11.6 diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java b/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java index b322e42..8f1d985 100644 --- a/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java +++ b/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java @@ -2,6 +2,7 @@ package cc.winboll.studio.winboll; import android.app.Activity; import android.os.Bundle; +import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -100,7 +101,16 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi @Override public boolean onOptionsItemSelected(MenuItem item) { int nItemId = item.getItemId(); - if (item.getItemId() == R.id.item_settings) { + if(item.getItemId() == R.id.item_home) { + // 关键:获取BrowserFragment的Handler + if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) { + // 创建消息(Java 7 显式创建Message) + Message msg = Message.obtain(); + msg.what = BrowserFragment.MSG_HOMEPAGE; // 指定消息标识 + // 发送消息(可携带数据,如msg.obj = "额外参数";) + mBrowserFragment.getBrowserHandler().sendMessage(msg); + } + }if (item.getItemId() == R.id.item_settings) { WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), SettingsActivity.class); } else if (item.getItemId() == R.id.item_log) { WinBoLLActivityManager.getInstance().startLogActivity(getApplicationContext()); diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/fragments/BrowserFragment.java b/winboll/src/main/java/cc/winboll/studio/winboll/fragments/BrowserFragment.java index 0bd7529..479b894 100644 --- a/winboll/src/main/java/cc/winboll/studio/winboll/fragments/BrowserFragment.java +++ b/winboll/src/main/java/cc/winboll/studio/winboll/fragments/BrowserFragment.java @@ -1,6 +1,8 @@ package cc.winboll.studio.winboll.fragments; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,11 +17,12 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import cc.winboll.studio.winboll.R; import cc.winboll.studio.winboll.views.WinBoLLView; + /** * @Author ZhanGSKen&豆包大模型 * @Date 2025/11/27 11:09 - * @Describe 浏览器Fragment(Java 7 语法完整版) - * 适配Java 7特性,移除Lambda/方法引用,兼容低版本Android系统 + * @Describe 浏览器Fragment(Java 7 语法完整版,新增Handler消息接收) + * 适配Java 7特性,支持接收应用内消息(如MSG_HOMEPAGE跳转首页) */ public class BrowserFragment extends Fragment implements View.OnClickListener, WinBoLLView.OnPageStatusListener { @@ -33,6 +36,12 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W private ProgressBar mProgressBar; private WinBoLLView mWinBoLLView; + // ------------------- 新增:Handler 消息定义(应用内通信) ------------------- + // 消息标识:跳转首页(winboll.cc) + public static final int MSG_HOMEPAGE = 1001; + // 自定义Handler(接收应用内其他页面发送的消息) + private Handler mBrowserHandler; + // 单例创建方法(Java 7 静态工厂模式) public static BrowserFragment newInstance() { return new BrowserFragment(); @@ -49,6 +58,8 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W initEvents(); // 初始化WinBoLLView initWinBoLLView(); + // ------------------- 新增:初始化Handler(关键) ------------------- + initHandler(); return view; } @@ -96,13 +107,36 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W mWinBoLLView.setProgressBar(mProgressBar); // 设置页面状态监听(this 实现 OnPageStatusListener) mWinBoLLView.setOnPageStatusListener(this); - // 预加载默认页面(兼容Java 7 字符串拼接) - //String defaultUrl = "https://www.baidu.com"; - String defaultUrl = "https://www.winboll.cc"; + // 预加载默认页面(winboll.cc 首页) + String defaultUrl = "https://www.winboll.cc"; mWinBoLLView.loadUrlSafe(defaultUrl); mEtUrl.setText(defaultUrl); } + // ------------------- 新增:初始化Handler(接收应用内消息) ------------------- + private void initHandler() { + // Java 7 匿名内部类实现Handler(主线程中创建,用于更新UI) + mBrowserHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + // 根据消息标识处理不同逻辑 + switch (msg.what) { + case MSG_HOMEPAGE: + // 处理“跳转首页”消息:加载winboll.cc + String homeUrl = "https://www.winboll.cc"; + mWinBoLLView.loadUrlSafe(homeUrl); + mEtUrl.setText(homeUrl); + showToast("已跳转至首页"); + break; + // 可扩展:添加其他消息标识(如MSG_OPEN_URL、MSG_REFRESH等) + default: + break; + } + } + }; + } + /** * 点击事件处理(Java 7 switch-case 语句,无增强switch) */ @@ -196,6 +230,11 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W showToast("加载失败:" + errorMsg); } + // ------------------- 新增:对外提供Handler(供其他页面获取并发送消息) ------------------- + public Handler getBrowserHandler() { + return mBrowserHandler; + } + // ------------------- 生命周期管理(防止内存泄漏,Java 7 显式重写) ------------------- @Override public void onDestroyView() { @@ -205,6 +244,11 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W mWinBoLLView.destroyWebView(); mWinBoLLView = null; } + // ------------------- 新增:移除Handler消息(关键,防止内存泄漏) ------------------- + if (mBrowserHandler != null) { + mBrowserHandler.removeCallbacksAndMessages(null); // 清除所有消息和回调 + mBrowserHandler = null; + } // 置空控件(帮助GC回收) mEtUrl = null; mBtnLoad = null; @@ -223,6 +267,11 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W mWinBoLLView.destroyWebView(); mWinBoLLView = null; } + // 再次清除Handler(双重保险) + if (mBrowserHandler != null) { + mBrowserHandler.removeCallbacksAndMessages(null); + mBrowserHandler = null; + } } } diff --git a/winboll/src/main/res/layout/activity_settings.xml b/winboll/src/main/res/layout/activity_settings.xml index b800c60..b0da872 100644 --- a/winboll/src/main/res/layout/activity_settings.xml +++ b/winboll/src/main/res/layout/activity_settings.xml @@ -11,5 +11,10 @@ android:layout_height="wrap_content" android:id="@+id/toolbar"/> + +