位置: 编程技术 - 正文

实现Android 动态加载APK(Fragment or Activity实现)(android 动态化方案)

编辑:rootadmin

推荐整理分享实现Android 动态加载APK(Fragment or Activity实现)(android 动态化方案),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android dsl动态化,android动态按钮,android动态化,android如何实现动态背景,android动态化,android 动态设置布局,安卓实现动态运行apk,android如何实现动态背景,内容如对您有帮助,希望把文章链接给更多的朋友!

尊重原创: public abstract AssetManager getAssets(); public abstract Resources getResources(); 至于为什么能解决资源的问题,我还是推荐几篇文章大家去学习一下吧: 本人的另外一篇文章: 讲解Android资源加载机制的一篇文章: 好了,上面就是通过Activity实现的动态加载apk,下面看看我是怎么通过Fragment来实现动态加载的,如果熟悉Fragment的同学们应该知道,Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理,即使我们通过类加载器把一个Fragment加入到内存,它和以前我们使用的Fragment没有什么两样,只要我们将这个Fragment加入到ProxyActivity,ProxyActivity就会自动的管理好这个Fragment的生命周期。所以我们就不需要担心Fragment的生命周期,下面就来看看代码实现吧:

1、BaseFragment.java

实现Android 动态加载APK(Fragment or Activity实现)(android 动态化方案)

[java] view plaincopyprint?public class BaseFragment extends Fragment implements IConstant { private static final String TAG = "BaseFragment"; protected String mDexPath; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle=this.getArguments(); //动态加载apk的路径 mDexPath=bundle.getString(DEX_PATH); } //在Fragment中启动另外一个Fragment protected void replaceFragmentByProxy(String name) { if(mDexPath==null) return; //PROXY_VIEW_ACTION 是ProxyActivity的action Intent intent=new Intent(PROXY_VIEW_ACTION); //传递apk路径 intent.putExtra(DEX_PATH, mDexPath); //是启动Fragment还是启动Fragment,这里启动的是Fragment intent.putExtra(START_TYPE, TYPE_FRAGMENT); //需要加载的fragment的类名 intent.putExtra(CLASS_NAME, name); this.startActivity(intent); } } 所有需要动态加载的Fragment都需要继承这个BaseFragment,每次启动一个Fragment,只需要传递apk的路径即可。下面是我写的一个MyFragment,用来使用BitmapFun加载网络图片的,这里仅仅是加载并显示图片,没有考虑其他的,如果想深入了解BitmapFun的使用,请看我的另外一篇文章: view plaincopyprint?public class MyFragment extends BaseFragment { private static final String TAG = "MyFragment"; private static final String IMAGE_CACHE_DIR = "thumbs"; private ImageFetcher mImageFetcher; private GridView mGridView; private Context context; private Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ImageCacheParams cacheParams = new ImageCacheParams(getActivity(), IMAGE_CACHE_DIR); cacheParams.setMemCacheSizePercent(0.f); // Set memory cache to % of app memory // The ImageFetcher takes care of loading images into our ImageView children asynchronously mImageFetcher = new ImageFetcher(getActivity(), ); mImageFetcher.setLoadingImage(R.drawable.empty_photo); mImageFetcher.addImageCache(getActivity().getSupportFragmentManager(), cacheParams); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //这里其实可以直接使用R.layout.fragment Resources mResources=this.getActivity().getResources(); return inflater.inflate(mResources.getIdentifier("fragment", "layout", "com.dl.client"), container,false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mGridView=(GridView) view.findViewById(R.id.gridView); btn=(Button)view.findViewById(R.id.btn_fragment); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //在Fragment中动态加载另外一个Fragment replaceFragmentByProxy("com.dl.client.TempFragment"); } }); context=this.getActivity(); mGridView.setAdapter(new BaseAdapter() { @Override public View getView(int position, View contentView, ViewGroup arg2) { ImageView mImg; if(contentView==null) { contentView=LayoutInflater.from(context).inflate(R.layout.item,null); } mImg=(ImageView)contentView.findViewById(R.id.img_); //mImg.setImageResource(R.drawable.empty_photo); mImageFetcher.loadImage(Images.imageThumbUrls[position], mImg); return contentView; } @Override public long getItemId(int arg0) { return 0; } @Override public Object getItem(int arg0) { return Images.imageThumbUrls[arg0]; } @Override public int getCount() { return Images.imageThumbUrls.length; } }); } } 下面看看这个应用的效果吧:

最后需要注意的一点就是动态加载的apk不能和宿主应用包含相同的jar包,不然会报错的。。。

彻底解决Android 应用方法数不能超过K的问题 尊重原创:

Android中的子菜单(SubMenu)使用案例 Android中创建子菜单的步骤:1、覆盖Activity中的onCreateOptionMenu()方法,调用Menu的addSubMenu()方法添加子菜单。2、调用SubMenu的add方法,添加子菜单。3、覆盖o

Android apk动态加载机制的研究 转载请注明出处:

标签: android 动态化方案

本文链接地址:https://www.jiuchutong.com/biancheng/384277.html 转载请保留说明!

上一篇:Android 进程与线程(android 进程通信)

下一篇:彻底解决Android 应用方法数不能超过65K的问题(彻底解决老鼠进发动机舱)

  • 公司出让上一任股东拥有的公司25%股权如何做账?
  • 纳税人性质怎么改
  • 现金股利什么时候发放
  • 签订合同未履行属于什么行为
  • 企业所得税的征税对象包括
  • 招标代理专家费由谁支付
  • 现金收据为什么也在自制原始凭证的范畴呢?
  • 企业合同约定调岗不接受辞退没赔偿成立吗
  • 不容忽视的近义词
  • 建筑公司工程款支付审批流程
  • 预提租赁费会计处理
  • 租入办公设备的租金计入什么科目
  • 开发企业售楼处工作内容
  • 非上市公司股权转让
  • 红利抵免的用法是什么
  • 专用发票购货清单怎么写
  • 或有负债披露原则
  • 苹果电脑安装了windows能取消吗
  • 关联交易认定标准税务
  • 企业之间资金拆借利息是否可以税前扣除
  • 母子公司吸收合并优劣势
  • windows10一直刷屏
  • 建筑业开具发票
  • 期间损益的科目
  • Mtdacq.exe - Mtdacq是什么进程 有什么用
  • 公会经费缴费单位应于每月
  • php imagick
  • 非货币性资产投资计入什么科目
  • 冰河湖怎么去
  • 萨勒克国家公园课文
  • 瓦普拉克
  • PHP jQuery+Ajax结合写批量删除功能
  • web前端性能响应时间
  • win11系统自动更新
  • php实现导出带样本的方法
  • 固定资产折旧完报废账务处理
  • php 多进程
  • 矿产资源补偿费属于管理费用吗
  • 领备用金填什么单子
  • 初始化mysql命令
  • 火车票丢了还能再取吗
  • 开了发票不做收入的账务处理是?
  • 报废车怎么处理最划算
  • 所得税营业成本包括管理费用吗
  • 发票怎样申领成功?
  • 给员工的奖金计入什么科目
  • 珠宝行业的会计
  • 应交税费未交增值税借方表示什么
  • 应付账款借方余额负数表示什么
  • 政府补助收入是指
  • 出口收汇核销单的作用
  • 失业保险稳岗返还计入什么科目
  • 高新技术企业政府补助要交所得税吗
  • 单位定期存款起存金额为1万元,多存不限,存期分为
  • 关税的计税方式一般可以分为
  • 如何填写会计凭证内容
  • 根据企业会计准则第4号固定资产,企业可选用的折旧方法
  • 直接费用的定义
  • Ubuntu下MySQL及工具安装配置详解
  • mysql5717安装及配置超详细教程
  • phpstudy中phpmyadmin无法访问
  • windowsserver2008r2密码重置
  • macbookpro日历
  • 电脑显示器无信号键盘灯不亮
  • windows7无法激活怎么解决方法
  • Win10系统怎么打开IE浏览器
  • linux系统概述
  • win7系统出现蓝屏
  • 误删了一些文件电脑不能正常启动了
  • cocos2d环境配置
  • script_tool_for_linux.bash: Linux 环境下的 hosts 一键部署脚本
  • 进入cmd命令
  • js的匿名函数
  • python的模块和包
  • js日历插件日期选择器
  • c#中init
  • jQuery使用contains过滤器实现精确匹配方法详解
  • 中山市十大纳税大户
  • 劳办发1994第48号文全文原文
  • 租赁发票交多少税费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设