优化启动页加载速度。
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Wed Dec 10 14:57:42 HKT 2025
|
#Wed Dec 10 08:16:33 GMT 2025
|
||||||
stageCount=3
|
stageCount=3
|
||||||
libraryProject=
|
libraryProject=
|
||||||
baseVersion=15.12
|
baseVersion=15.12
|
||||||
publishVersion=15.12.2
|
publishVersion=15.12.2
|
||||||
buildCount=0
|
buildCount=5
|
||||||
baseBetaVersion=15.12.3
|
baseBetaVersion=15.12.3
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ import android.view.Menu;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
|
||||||
import cc.winboll.studio.libaes.activitys.AboutActivity;
|
import cc.winboll.studio.libaes.activitys.AboutActivity;
|
||||||
import cc.winboll.studio.libaes.models.APPInfo;
|
import cc.winboll.studio.libaes.models.APPInfo;
|
||||||
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
||||||
import cc.winboll.studio.libaes.utils.DevelopUtils;
|
import cc.winboll.studio.libaes.utils.DevelopUtils;
|
||||||
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
||||||
import cc.winboll.studio.libaes.views.ADsBannerView;
|
import cc.winboll.studio.libaes.views.ADsBannerView;
|
||||||
import cc.winboll.studio.libappbase.LogActivity;
|
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.powerbell.activities.BackgroundSettingsActivity;
|
import cc.winboll.studio.powerbell.activities.BackgroundSettingsActivity;
|
||||||
import cc.winboll.studio.powerbell.activities.BatteryReportActivity;
|
import cc.winboll.studio.powerbell.activities.BatteryReportActivity;
|
||||||
@@ -42,38 +42,21 @@ import cc.winboll.studio.powerbell.utils.PermissionUtils;
|
|||||||
*/
|
*/
|
||||||
public class MainActivity extends WinBoLLActivity {
|
public class MainActivity extends WinBoLLActivity {
|
||||||
|
|
||||||
|
// ======================== 静态常量(首屏排列,统一管理)========================
|
||||||
public static final String TAG = "MainActivity";
|
public static final String TAG = "MainActivity";
|
||||||
|
|
||||||
private static final int REQUEST_WRITE_STORAGE_PERMISSION = 1001;
|
private static final int REQUEST_WRITE_STORAGE_PERMISSION = 1001;
|
||||||
|
|
||||||
// private static final String PRIVACY_FILE = "privacy_pfs";
|
// ======================== 成员属性(按「静态→非静态」「核心→辅助」排序)========================
|
||||||
// private static final String PRIVACY_VALUE = "privacy_value";//0: 拒绝,1:赞同
|
public static MainActivity _mMainActivity; // 静态Activity实例(全局调用)
|
||||||
//
|
private App mApplication; // 应用Application实例
|
||||||
// private SharedPreferences mSharedPreferences;
|
private Menu mMenu; // 顶部菜单实例
|
||||||
//
|
private Fragment mCurrentShowFragment; // 当前显示的Fragment
|
||||||
// private String BANNER_POS_ID = "802e356f1726f9ff39c69308bfd6f06a";
|
private MainViewFragment mMainViewFragment; // 主Fragment(核心视图)
|
||||||
// private String BANNER_POS_ID_WINBOLL_BETA = "d129ee5a263911f981a6dc7a9802e3e7";
|
private Toolbar mToolbar; // 顶部工具栏
|
||||||
// private String BANNER_POS_ID_WINBOLL = "4ec30efdb32271765b9a4efac902828b";
|
private ADsBannerView mADsBannerView; // 广告Banner视图
|
||||||
|
|
||||||
// private BannerAd mBannerAd;
|
|
||||||
// private List<BannerAd> mAllBanners = new ArrayList<>();
|
|
||||||
//
|
|
||||||
// private ViewGroup mContainer;
|
|
||||||
//
|
|
||||||
// private boolean mIsBiddingWin = true;
|
|
||||||
//
|
|
||||||
// public static final int BACKGROUND_PICTURE_REQUEST_CODE = 0;
|
|
||||||
|
|
||||||
public static MainActivity _mMainActivity;
|
|
||||||
private App mApplication;
|
|
||||||
private Menu mMenu;
|
|
||||||
private Fragment mCurrentShowFragment;
|
|
||||||
private MainViewFragment mMainViewFragment;
|
|
||||||
private Toolbar mToolbar;
|
|
||||||
// 新增:主线程Handler,确保广告操作在主线程执行
|
|
||||||
//private Handler mMainHandler;
|
|
||||||
ADsBannerView mADsBannerView;
|
|
||||||
|
|
||||||
|
// ======================== 重写父类抽象方法(优先排列,明确实现)========================
|
||||||
@Override
|
@Override
|
||||||
public Activity getActivity() {
|
public Activity getActivity() {
|
||||||
return this;
|
return this;
|
||||||
@@ -89,74 +72,132 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
LogUtils.d(TAG, "onCreate(...)");
|
LogUtils.d(TAG, "onCreate(...)");
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_main);
|
setContentView(R.layout.activity_main);
|
||||||
mADsBannerView = findViewById(R.id.adsbanner);
|
|
||||||
|
|
||||||
// mContainer = findViewById(R.id.ads_container);
|
// 初始化视图与实例
|
||||||
//
|
initView();
|
||||||
// // 初始化主线程Handler(关键:确保广告操作在主线程执行)
|
initInstance();
|
||||||
// mMainHandler = new Handler(Looper.getMainLooper());
|
initFragment();
|
||||||
//
|
|
||||||
// // 米盟模块:隐私协议弹窗
|
|
||||||
// showPrivacy();
|
|
||||||
|
|
||||||
_mMainActivity = this;
|
// 权限申请
|
||||||
mApplication = (App) getApplication();
|
PermissionUtils.getInstance().checkAndRequestStoragePermission(this);
|
||||||
|
|
||||||
// 初始化工具栏
|
|
||||||
mToolbar = findViewById(R.id.toolbar);
|
|
||||||
setSupportActionBar(mToolbar);
|
|
||||||
mToolbar.setTitleTextAppearance(this, R.style.Toolbar_TitleText);
|
|
||||||
|
|
||||||
// 初始化主Fragment
|
|
||||||
if (mMainViewFragment == null) {
|
|
||||||
FragmentTransaction tx = getFragmentManager().beginTransaction();
|
|
||||||
mMainViewFragment = new MainViewFragment();
|
|
||||||
tx.add(R.id.activitymainFrameLayout1, mMainViewFragment, MainViewFragment.TAG);
|
|
||||||
tx.commit();
|
|
||||||
}
|
|
||||||
showFragment(mMainViewFragment);
|
|
||||||
|
|
||||||
PermissionUtils.getInstance().checkAndRequestStoragePermission(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
// // 修复:释放广告资源,避免内存泄漏
|
// 释放广告资源
|
||||||
// releaseAdResources();
|
if (mADsBannerView != null) {
|
||||||
|
mADsBannerView.releaseAdResources();
|
||||||
|
}
|
||||||
// 置空静态引用,避免内存泄漏
|
// 置空静态引用,避免内存泄漏
|
||||||
_mMainActivity = null;
|
_mMainActivity = null;
|
||||||
// // 移除Handler回调
|
|
||||||
// if (mMainHandler != null) {
|
|
||||||
// mMainHandler.removeCallbacksAndMessages(null);
|
|
||||||
// }
|
|
||||||
if (mADsBannerView != null) {
|
|
||||||
mADsBannerView.releaseAdResources();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 释放广告资源(关键:避免内存泄漏和空Context调用)
|
|
||||||
// */
|
|
||||||
// private void releaseAdResources() {
|
|
||||||
// LogUtils.d(TAG, "releaseAdResources()");
|
|
||||||
// // 销毁所有广告实例
|
|
||||||
// if (mAllBanners != null && !mAllBanners.isEmpty()) {
|
|
||||||
// for (BannerAd ad : mAllBanners) {
|
|
||||||
// if (ad != null) {
|
|
||||||
// ad.destroy();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// mAllBanners.clear();
|
|
||||||
// }
|
|
||||||
// // 置空当前广告引用
|
|
||||||
// mBannerAd = null;
|
|
||||||
// // 移除广告容器中的视图
|
|
||||||
// if (mContainer != null) {
|
|
||||||
// mContainer.removeAllViews();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
|
super.onPostCreate(savedInstanceState);
|
||||||
|
reloadBackground();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
reloadBackground();
|
||||||
|
setBackgroundColor();
|
||||||
|
// 恢复广告
|
||||||
|
if (mADsBannerView != null) {
|
||||||
|
mADsBannerView.resumeADs(MainActivity.this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
mMenu = menu;
|
||||||
|
// 主题菜单
|
||||||
|
AESThemeUtil.inflateMenu(this, menu);
|
||||||
|
// 调试工具菜单(仅Debug模式显示)
|
||||||
|
if (App.isDebugging()) {
|
||||||
|
DevelopUtils.inflateMenu(this, menu);
|
||||||
|
}
|
||||||
|
// 应用核心菜单
|
||||||
|
getMenuInflater().inflate(R.menu.toolbar_main, mMenu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
int menuItemId = item.getItemId();
|
||||||
|
// 主题切换菜单
|
||||||
|
if (AESThemeUtil.onAppThemeItemSelected(this, item)) {
|
||||||
|
recreate();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// 调试工具菜单
|
||||||
|
if (DevelopUtils.onDevelopItemSelected(this, item)) {
|
||||||
|
LogUtils.d(TAG, String.format("onOptionsItemSelected item.getItemId() %d ", item.getItemId()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// 应用核心菜单
|
||||||
|
switch (menuItemId) {
|
||||||
|
case R.id.action_settings:
|
||||||
|
startActivity(new Intent(this, SettingsActivity.class));
|
||||||
|
break;
|
||||||
|
case R.id.action_battery_report:
|
||||||
|
startActivity(new Intent(this, BatteryReportActivity.class));
|
||||||
|
break;
|
||||||
|
case R.id.action_clearrecord:
|
||||||
|
startActivity(new Intent(this, ClearRecordActivity.class));
|
||||||
|
break;
|
||||||
|
case R.id.action_changepicture:
|
||||||
|
startActivity(new Intent(this, BackgroundSettingsActivity.class));
|
||||||
|
break;
|
||||||
|
case R.id.action_unittestactivity:
|
||||||
|
startActivity(new Intent(this, MainUnitTestActivity.class));
|
||||||
|
break;
|
||||||
|
case R.id.action_about:
|
||||||
|
Intent intent = new Intent(getApplicationContext(), AboutActivity.class);
|
||||||
|
APPInfo appInfo = genDefaultAPPInfo();
|
||||||
|
intent.putExtra(AboutActivity.EXTRA_APPINFO, appInfo);
|
||||||
|
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), intent, AboutActivity.class);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
if (mCurrentShowFragment != mMainViewFragment) {
|
||||||
|
showFragment(mMainViewFragment);
|
||||||
|
} else {
|
||||||
|
moveTaskToBack(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchKeyEvent(KeyEvent event) {
|
||||||
|
return super.dispatchKeyEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupToolbar() {
|
||||||
|
super.setupToolbar();
|
||||||
|
if (getSupportActionBar() != null) {
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ======================== 核心业务逻辑方法(按功能优先级排序)========================
|
||||||
|
/**
|
||||||
|
* 显示指定Fragment(隐藏其他Fragment)
|
||||||
|
*/
|
||||||
void showFragment(Fragment fragment) {
|
void showFragment(Fragment fragment) {
|
||||||
FragmentTransaction tx = getFragmentManager().beginTransaction();
|
FragmentTransaction tx = getFragmentManager().beginTransaction();
|
||||||
for (Fragment item : getFragmentManager().getFragments()) {
|
for (Fragment item : getFragmentManager().getFragments()) {
|
||||||
@@ -167,21 +208,34 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
mCurrentShowFragment = fragment;
|
mCurrentShowFragment = fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
protected void onPostCreate(Bundle savedInstanceState) {
|
* 刷新背景(全局静态调用,带生命周期校验)
|
||||||
super.onPostCreate(savedInstanceState);
|
*/
|
||||||
reloadBackground();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void reloadBackground() {
|
public static void reloadBackground() {
|
||||||
// 修复:添加非空校验,避免Activity已销毁时调用
|
|
||||||
if (_mMainActivity != null && !_mMainActivity.isFinishing() && !_mMainActivity.isDestroyed()) {
|
if (_mMainActivity != null && !_mMainActivity.isFinishing() && !_mMainActivity.isDestroyed()) {
|
||||||
_mMainActivity.mMainViewFragment.reloadBackground();
|
_mMainActivity.mMainViewFragment.reloadBackground();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过Uri获取文件在本地存储的真实路径
|
* 设置主页面背景颜色(从BackgroundBean获取颜色值)
|
||||||
|
*/
|
||||||
|
void setBackgroundColor() {
|
||||||
|
// 生命周期校验,避免Activity销毁后操作UI
|
||||||
|
if (isFinishing() || isDestroyed()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
||||||
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
|
int nPixelColor = bean.getPixelColor();
|
||||||
|
RelativeLayout mainLayout = findViewById(R.id.activitymainRelativeLayout1);
|
||||||
|
if (mainLayout != null) {
|
||||||
|
mainLayout.setBackgroundColor(nPixelColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过Uri获取文件本地真实路径(兼容图片选择等场景)
|
||||||
*/
|
*/
|
||||||
private String getRealPathFromURI(Uri contentUri) {
|
private String getRealPathFromURI(Uri contentUri) {
|
||||||
String[] proj = {MediaStore.MediaColumns.DATA};
|
String[] proj = {MediaStore.MediaColumns.DATA};
|
||||||
@@ -200,78 +254,10 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
protected void onResume() {
|
* 生成默认APP信息(用于关于页面)
|
||||||
super.onResume();
|
*/
|
||||||
reloadBackground();
|
APPInfo genDefaultAPPInfo() {
|
||||||
setBackgroundColor();
|
|
||||||
if (mADsBannerView != null) {
|
|
||||||
mADsBannerView.resumeADs(MainActivity.this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// // 修复:优化广告请求逻辑(添加生命周期判断 + 主线程执行)
|
|
||||||
// if (!isFinishing() && !isDestroyed()) {
|
|
||||||
// String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
|
|
||||||
// if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))) {
|
|
||||||
// LogUtils.i(TAG, "已同意隐私协议,开始播放米盟广告...");
|
|
||||||
// mMainHandler.postDelayed(new Runnable() {
|
|
||||||
// @Override
|
|
||||||
// public void run() {
|
|
||||||
// // 再次校验生命周期,避免延迟执行时Activity已销毁
|
|
||||||
// if (!isFinishing() && !isDestroyed()) {
|
|
||||||
// fetchAd();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }, 1000); // 延迟1秒请求广告,提升页面加载体验
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
mMenu = menu;
|
|
||||||
// 主题菜单
|
|
||||||
AESThemeUtil.inflateMenu(this, menu);
|
|
||||||
// 调试工具菜单
|
|
||||||
if (App.isDebugging()) {
|
|
||||||
DevelopUtils.inflateMenu(this, menu);
|
|
||||||
}
|
|
||||||
// 应用其他菜单
|
|
||||||
getMenuInflater().inflate(R.menu.toolbar_main, mMenu);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
int menuItemId = item.getItemId();
|
|
||||||
if (AESThemeUtil.onAppThemeItemSelected(this, item)) {
|
|
||||||
recreate();
|
|
||||||
} if (DevelopUtils.onDevelopItemSelected(this, item)) {
|
|
||||||
LogUtils.d(TAG, String.format("onOptionsItemSelected item.getItemId() %d ", item.getItemId()));
|
|
||||||
} else if (menuItemId == R.id.action_settings) {
|
|
||||||
startActivity(new Intent(this, SettingsActivity.class));
|
|
||||||
} else if (menuItemId == R.id.action_battery_report) {
|
|
||||||
startActivity(new Intent(this, BatteryReportActivity.class));
|
|
||||||
} else if (menuItemId == R.id.action_clearrecord) {
|
|
||||||
startActivity(new Intent(this, ClearRecordActivity.class));
|
|
||||||
} else if (menuItemId == R.id.action_changepicture) {
|
|
||||||
startActivity(new Intent(this, BackgroundSettingsActivity.class));
|
|
||||||
} else if (menuItemId == R.id.action_unittestactivity) {
|
|
||||||
startActivity(new Intent(this, MainUnitTestActivity.class));
|
|
||||||
} else if (menuItemId == R.id.action_about) {
|
|
||||||
Intent intent = new Intent(getApplicationContext(), AboutActivity.class);
|
|
||||||
APPInfo appInfo = genDefaultAPPInfo();
|
|
||||||
intent.putExtra(AboutActivity.EXTRA_APPINFO, appInfo);
|
|
||||||
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), intent, AboutActivity.class);
|
|
||||||
} else {
|
|
||||||
return super.onOptionsItemSelected(item);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
APPInfo genDefaultAPPInfo() {
|
|
||||||
String szBranchName = "powerbell";
|
String szBranchName = "powerbell";
|
||||||
APPInfo appInfo = new APPInfo();
|
APPInfo appInfo = new APPInfo();
|
||||||
appInfo.setAppName(getString(R.string.app_name));
|
appInfo.setAppName(getString(R.string.app_name));
|
||||||
@@ -287,372 +273,37 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
return appInfo;
|
return appInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
// ======================== 内部初始化辅助方法(私有,统一放在最后)========================
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
/**
|
||||||
// if (requestCode == BACKGROUND_PICTURE_REQUEST_CODE) {
|
* 初始化视图控件(findViewById)
|
||||||
// if (resultCode == RESULT_OK) {
|
*/
|
||||||
// Toast.makeText(getApplicationContext(), "OK", Toast.LENGTH_SHORT).show();
|
private void initView() {
|
||||||
// }
|
mADsBannerView = findViewById(R.id.adsbanner);
|
||||||
// } else {
|
mToolbar = findViewById(R.id.toolbar);
|
||||||
// String sz = "Unsolved requestCode = " + Integer.toString(requestCode);
|
|
||||||
// Toast.makeText(getApplicationContext(), sz, Toast.LENGTH_SHORT).show();
|
|
||||||
// LogUtils.d(TAG, sz);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public void onBackPressed() {
|
* 初始化实例(Application、工具类等)
|
||||||
if (mCurrentShowFragment != mMainViewFragment) {
|
*/
|
||||||
showFragment(mMainViewFragment);
|
private void initInstance() {
|
||||||
} else {
|
_mMainActivity = this;
|
||||||
moveTaskToBack(true);
|
mApplication = (App) getApplication();
|
||||||
}
|
// 初始化工具栏
|
||||||
|
setSupportActionBar(mToolbar);
|
||||||
|
mToolbar.setTitleTextAppearance(this, R.style.Toolbar_TitleText);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setBackgroundColor() {
|
/**
|
||||||
// 修复:添加Activity非空校验
|
* 初始化主Fragment(添加并显示)
|
||||||
if (isFinishing() || isDestroyed()) {
|
*/
|
||||||
return;
|
private void initFragment() {
|
||||||
}
|
if (mMainViewFragment == null) {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
FragmentTransaction tx = getFragmentManager().beginTransaction();
|
||||||
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
mMainViewFragment = new MainViewFragment();
|
||||||
int nPixelColor = bean.getPixelColor();
|
tx.add(R.id.activitymainFrameLayout1, mMainViewFragment, MainViewFragment.TAG);
|
||||||
RelativeLayout mainLayout = findViewById(R.id.activitymainRelativeLayout1);
|
tx.commit();
|
||||||
if (mainLayout != null) {
|
|
||||||
mainLayout.setBackgroundColor(nPixelColor);
|
|
||||||
}
|
}
|
||||||
|
showFragment(mMainViewFragment);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 显示广告(核心修复:传递安全的Context + 生命周期校验)
|
|
||||||
// */
|
|
||||||
// private void showAd() {
|
|
||||||
// LogUtils.d(TAG, "showAd()");
|
|
||||||
// // 1. 生命周期校验:避免Activity已销毁时操作UI
|
|
||||||
// if (isFinishing() || isDestroyed()) {
|
|
||||||
// LogUtils.e(TAG, "showAd: Activity is finishing or destroyed");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// // 2. 非空校验:广告实例和容器
|
|
||||||
// if (mBannerAd == null || mContainer == null) {
|
|
||||||
// LogUtils.e(TAG, "showAd: BannerAd or Container is null");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// // 3. 创建广告容器(使用ApplicationContext避免内存泄漏)
|
|
||||||
// final FrameLayout container = new FrameLayout(getApplicationContext());
|
|
||||||
// container.setPadding(0, 0, 0, MimoUtils.dpToPx(this, 10));
|
|
||||||
// mContainer.addView(container, new FrameLayout.LayoutParams(
|
|
||||||
// FrameLayout.LayoutParams.MATCH_PARENT,
|
|
||||||
// FrameLayout.LayoutParams.WRAP_CONTENT
|
|
||||||
// ));
|
|
||||||
//
|
|
||||||
// if (mIsBiddingWin) {
|
|
||||||
// mBannerAd.setPrice(getPrice());
|
|
||||||
// }
|
|
||||||
// // 4. 显示广告:传递ApplicationContext,避免Activity Context失效
|
|
||||||
// mBannerAd.showAd(MainActivity.this, container, new BannerAd.BannerInteractionListener() {
|
|
||||||
// @Override
|
|
||||||
// public void onAdClick() {
|
|
||||||
// LogUtils.d(TAG, "onAdClick");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onAdShow() {
|
|
||||||
// LogUtils.d(TAG, "onAdShow");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onAdDismiss() {
|
|
||||||
// LogUtils.d(TAG, "onAdDismiss");
|
|
||||||
// // 修复:移除容器时校验Activity状态
|
|
||||||
// if (!isFinishing() && !isDestroyed() && mContainer != null) {
|
|
||||||
// mContainer.removeView(container);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onRenderSuccess() {
|
|
||||||
// LogUtils.d(TAG, "onRenderSuccess");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onRenderFail(int code, String msg) {
|
|
||||||
// LogUtils.e(TAG, "onRenderFail errorCode " + code + " errorMsg " + msg);
|
|
||||||
// // 修复:渲染失败时移除容器
|
|
||||||
// if (!isFinishing() && !isDestroyed() && mContainer != null) {
|
|
||||||
// mContainer.removeView(container);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 请求广告(核心修复:Context安全校验 + 异常捕获 + 资源管理)
|
|
||||||
// */
|
|
||||||
// private void fetchAd() {
|
|
||||||
// LogUtils.d(TAG, "fetchAd()");
|
|
||||||
// // 1. 双重校验:Activity未销毁 + Context非空
|
|
||||||
// if (isFinishing() || isDestroyed() || getApplicationContext() == null) {
|
|
||||||
// LogUtils.e(TAG, "fetchAd: Invalid Context or Activity state");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// // 2. 释放之前的广告资源,避免内存泄漏
|
|
||||||
// if (mBannerAd != null) {
|
|
||||||
// mBannerAd.destroy();
|
|
||||||
// }
|
|
||||||
// // 3. 初始化广告(使用ApplicationContext,避免Activity Context失效)
|
|
||||||
// try {
|
|
||||||
// mBannerAd = new BannerAd();
|
|
||||||
// mAllBanners.add(mBannerAd);
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// LogUtils.e(TAG, "fetchAd: Init BannerAd failed", e);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// // 4. 设置下载监听
|
|
||||||
// mBannerAd.setDownLoadListener(new BannerAd.BannerDownloadListener() {
|
|
||||||
// @Override
|
|
||||||
// public void onDownloadStarted() {
|
|
||||||
// LogUtils.d(TAG, "onDownloadStarted");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onDownloadPaused() {
|
|
||||||
// LogUtils.d(TAG, "onDownloadPaused");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onDownloadFailed(int errorCode) {
|
|
||||||
// LogUtils.d(TAG, "onDownloadFailed, errorCode = " + errorCode);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onDownloadFinished() {
|
|
||||||
// LogUtils.d(TAG, "onDownloadFinished");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onDownloadProgressUpdated(int progress) {
|
|
||||||
// LogUtils.d(TAG, "onDownloadProgressUpdated " + progress + "%");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onInstallFailed(int errorCode) {
|
|
||||||
// LogUtils.d(TAG, "onInstallFailed, errorCode = " + errorCode);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onInstallStart() {
|
|
||||||
// LogUtils.d(TAG, "onInstallStart");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onInstallSuccess() {
|
|
||||||
// LogUtils.d(TAG, "onInstallSuccess");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onDownloadCancel() {
|
|
||||||
// LogUtils.d(TAG, "onDownloadCancel");
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// // 5. 构建广告参数并请求
|
|
||||||
// String currentAD_ID = getAD_ID();
|
|
||||||
// LogUtils.d(TAG, String.format("currentAD_ID = %s", currentAD_ID));
|
|
||||||
// ADParams params = new ADParams.Builder().setUpId(currentAD_ID).build();
|
|
||||||
// mBannerAd.loadAd(params, new BannerAd.BannerLoadListener() {
|
|
||||||
// @Override
|
|
||||||
// public void onBannerAdLoadSuccess() {
|
|
||||||
// LogUtils.d(TAG, "onBannerAdLoadSuccess()");
|
|
||||||
// // 修复:广告加载成功后校验Activity状态
|
|
||||||
// if (!isFinishing() && !isDestroyed()) {
|
|
||||||
// showAd();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onAdLoadFailed(int errorCode, String errorMsg) {
|
|
||||||
// LogUtils.e(TAG, "onAdLoadFailed: errorCode = " + errorCode + ", errorMsg = " + errorMsg);
|
|
||||||
// // 修复:加载失败时移除当前广告实例
|
|
||||||
// if (mAllBanners.contains(mBannerAd)) {
|
|
||||||
// mAllBanners.remove(mBannerAd);
|
|
||||||
// }
|
|
||||||
// mBannerAd.destroy();
|
|
||||||
// mBannerAd = null;
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 根据当前秒数获取广告ID(原逻辑保留)
|
|
||||||
// */
|
|
||||||
// private String getAD_ID() {
|
|
||||||
// long currentSecond = System.currentTimeMillis() / 1000;
|
|
||||||
// return (currentSecond % 2 == 0) ? BANNER_POS_ID :
|
|
||||||
// (BuildConfig.DEBUG ? BANNER_POS_ID_WINBOLL_BETA : BANNER_POS_ID_WINBOLL);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 获取广告价格(原逻辑保留,添加空指针校验)
|
|
||||||
// */
|
|
||||||
// private long getPrice() {
|
|
||||||
// if (mBannerAd == null) {
|
|
||||||
// return 0;
|
|
||||||
// }
|
|
||||||
// Map<String, Object> map = mBannerAd.getMediaExtraInfo();
|
|
||||||
// if (map == null || map.isEmpty() || !map.containsKey("price")) {
|
|
||||||
// LogUtils.w(TAG, "getPrice: media extra info is null or no price key");
|
|
||||||
// return 0;
|
|
||||||
// }
|
|
||||||
// Object priceObj = map.get("price");
|
|
||||||
// if (priceObj instanceof Long) {
|
|
||||||
// return (Long) priceObj;
|
|
||||||
// } else if (priceObj instanceof Integer) {
|
|
||||||
// return ((Integer) priceObj).longValue();
|
|
||||||
// } else {
|
|
||||||
// LogUtils.e(TAG, "getPrice: price type is invalid");
|
|
||||||
// return 0;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 显示隐私协议弹窗(原逻辑保留,优化Context使用)
|
|
||||||
// */
|
|
||||||
// private void showPrivacy() {
|
|
||||||
// // 校验Activity状态,避免弹窗泄露
|
|
||||||
// if (isFinishing() || isDestroyed()) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
|
|
||||||
// if (TextUtils.equals(privacyAgreeValue, String.valueOf(0))) {
|
|
||||||
// LogUtils.i(TAG, "已拒绝隐私协议,广告已处于不可用状态...");
|
|
||||||
// Toast.makeText(getApplicationContext(), "已拒绝隐私协议,广告已处于不可用状态", Toast.LENGTH_SHORT).show();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))) {
|
|
||||||
// LogUtils.i(TAG, "已同意隐私协议,开始初始化米盟SDK...");
|
|
||||||
// initMimoSdk();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// LogUtils.i(TAG, "开始弹出隐私协议...");
|
|
||||||
// AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
|
||||||
// builder.setTitle("用户须知");
|
|
||||||
// builder.setMessage("小米广告SDK隐私政策: https://dev.mi.com/distribute/doc/details?pId=1688, 请复制到浏览器查看");
|
|
||||||
// builder.setIcon(R.drawable.ic_launcher);
|
|
||||||
// builder.setCancelable(false); // 点击对话框以外的区域不消失
|
|
||||||
// builder.setPositiveButton("同意", new DialogInterface.OnClickListener() {
|
|
||||||
// @Override
|
|
||||||
// public void onClick(DialogInterface dialog, int which) {
|
|
||||||
// getSharedPreferences().edit()
|
|
||||||
// .putString(PRIVACY_VALUE, String.valueOf(1))
|
|
||||||
// .apply();
|
|
||||||
// initMimoSdk();
|
|
||||||
// dialog.dismiss();
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// builder.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
|
|
||||||
// @Override
|
|
||||||
// public void onClick(DialogInterface dialog, int which) {
|
|
||||||
// getSharedPreferences().edit()
|
|
||||||
// .putString(PRIVACY_VALUE, String.valueOf(0))
|
|
||||||
// .apply();
|
|
||||||
// dialog.dismiss();
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// AlertDialog dialog = builder.create();
|
|
||||||
//
|
|
||||||
// // 配置弹窗位置(底部全屏)
|
|
||||||
// Window window = dialog.getWindow();
|
|
||||||
// if (window != null) {
|
|
||||||
// window.setGravity(Gravity.BOTTOM);
|
|
||||||
// WindowManager m = getWindowManager();
|
|
||||||
// Display d = m.getDefaultDisplay();
|
|
||||||
// WindowManager.LayoutParams p = window.getAttributes();
|
|
||||||
// p.width = d.getWidth();
|
|
||||||
// window.setAttributes(p);
|
|
||||||
// }
|
|
||||||
// dialog.show();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 初始化米盟SDK(核心修复:传递ApplicationContext + 异常捕获)
|
|
||||||
// */
|
|
||||||
// private void initMimoSdk() {
|
|
||||||
// // 1. 安全获取ApplicationContext,避免Activity Context失效
|
|
||||||
// Context appContext = getApplicationContext();
|
|
||||||
// if (appContext == null) {
|
|
||||||
// Log.e(TAG, "initMimoSdk: ApplicationContext is null");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// // 2. 初始化SDK,捕获异常避免崩溃
|
|
||||||
// try {
|
|
||||||
// MimoSdk.init(appContext, new MimoCustomController() {
|
|
||||||
// @Override
|
|
||||||
// public boolean isCanUseLocation() {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public MimoLocation getMimoLocation() {
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public boolean isCanUseWifiState() {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public boolean alist() {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// }, new MimoSdk.InitCallback() {
|
|
||||||
// @Override
|
|
||||||
// public void success() {
|
|
||||||
// Log.d(TAG, "MimoSdk init success");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void fail(int code, String msg) {
|
|
||||||
// Log.e(TAG, "MimoSdk init fail, code=" + code + ",msg=" + msg);
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// MimoSdk.setDebugOn(true);
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// Log.e(TAG, "initMimoSdk: init failed", e);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean dispatchKeyEvent(KeyEvent event) {
|
|
||||||
return super.dispatchKeyEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setupToolbar() {
|
|
||||||
super.setupToolbar();
|
|
||||||
if (getSupportActionBar() != null) {
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 获取SharedPreferences实例(原逻辑保留,添加空指针校验)
|
|
||||||
// */
|
|
||||||
// public SharedPreferences getSharedPreferences() {
|
|
||||||
// if (mSharedPreferences == null) {
|
|
||||||
// // 修复:使用ApplicationContext获取SharedPreferences,避免Activity Context泄露
|
|
||||||
// Context appContext = getApplicationContext();
|
|
||||||
// if (appContext != null) {
|
|
||||||
// mSharedPreferences = appContext.getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
|
|
||||||
// } else {
|
|
||||||
// Log.e(TAG, "getSharedPreferences: ApplicationContext is null");
|
|
||||||
// // 降级方案:若ApplicationContext为空,使用Activity Context(仅作兼容)
|
|
||||||
// mSharedPreferences = super.getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return mSharedPreferences;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ public class MainViewFragment extends Fragment {
|
|||||||
|
|
||||||
public void reloadBackground() {
|
public void reloadBackground() {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(getActivity());
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(getActivity());
|
||||||
mBgSourceUtils.loadSettings();
|
utils.loadSettings();
|
||||||
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
mBackgroundView.loadBackgroundBean(bean);
|
mBackgroundView.loadBackgroundBean(bean);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user