月度归档: 2021 年 3 月

Java to kotlin 原来那么简单的。

Java to kotlin 原来那么简单的。

*近做 RN 还要写写原生安卓和 IOS 。于是想把业务中的库拉出来整合一下。

发现社区出了 react-native-builder-bob 来做组件手脚架。

模版只有支持 kotlin + oc / kotlin + swift / C++

我自己业务都是用 java + oc 来写原生库的。唯有选择 kotlin + oc 。

看到 md 上说 java 代码直接复制到对应的 KT 文件去,AS 编辑器就会自动帮你转的了。

试了一下,果然可以。所有啰嗦的 java 语法都变成了简洁的 kotlin 。

%title插图%num

  •  2021-02-28 12:24:54 +08:00
1 KeyboardManAnAn   26 天前 这个确实是 Android Studio 的良心功能, 我*次用的时候确实是被惊艳到了. 相比较而言, Objective-C 转 Swift 就蛋疼太多了, 虽然也有收费应用能够实现自动转换代码的功能, 但是远不及 IDE 自带的转换功能体验来得好我觉得
2 zagfai   26 天前   1 Java 转 Kotlin 转完之后是 KotJava,改得了的代码,改不了的编程思维。
3 winterbells   26 天前 Ctrl + Alt + Shift + K
4 teok   26 天前 @zagfai 的确是这样。语法很好学,符合这语言设计哲学的编程思维需要很多时间去实践掌握
5 HangoX   26 天前 反过来没有,当你要粘贴到 java 的项目的时候有点*望。
6 DiDiz   26 天前 花一点时间去学 Kotlin 呗,又不难,一周就够了
7 Anarchy   26 天前 自动转还是可能出问题的,特别 Lambda,匿名内部类这块。
8 zhang2e   26 天前 自动转出的代码,其实还是用 Java 的思维写 Kotlin,Kotlin 的特性都没有用到,一堆警告,很不优雅。
9 hantsy   26 天前 @Anarchy 转 Lambda 的确问题太多。特别是在用一些 Stream 类似的 API 时。
10 wobuhuicode   26 天前 @DiDiz 这也有的杆……全篇有说我不会 kotlin 吗……说的是旧代码抽出来做库。
11 night98   26 天前 文件右键就能直接转了,IDEA 是这样的,不过通常会在一些代码例如 lambda 或是一些 spring 相关的代码上出现问题,不过我这边是后端,安卓这块可能有一定差异
12 sagaxu   26 天前 via Android 以前自动翻译的代码质量差,远不如人肉翻译,自动转化有时候还编译不过,现在改善了吗?
13 wobuhuicode   26 天前 via iPhone @night98 我这里需求有点不一样。rn 类库手脚架模版文件已经创建好了,只需要把以前的业务代码复制到指定位置就好了。所以没有直接转。
14 zerofancy   25 天前 @HangoX 反过来可以通过先查看字节码再反编译的方式,不过肯定还是要自己进行一些调整啥的 https://blog.mindorks.com/how-to-convert-a-kotlin-source-file-to-a-java-source-file
15 HangoX   25 天前 @zerofancy 我知道可以看字节码反编译,kt 插件集成了,但是那个代码基本是不能用的。

python 类的子类

python 类的子类

看下面的代码,请仔细阅读,并看看是否能够发现点什么问题呢?

#!/usr/bin/env python
#coding:utf-8

class Person:
def __init__(self, name, lang, email):
self.name = name
self.lang = lang
self.email = email

def author(self):
return self.name

class Programmer:
def __init__(self, name, lang, email, system, website):
self.name = name
self.lang = lang
self.email = email
self.system = system
self.website = website

def pythoner(self):
pythoner_list = [ self.name, self.lang, self.email, self.system, self.website ]
return pythoner_list

if __name__==”__main__”:
writer = Person(“hiekay”,”Chinese”,”hiekay@gmail.com”)
python = Programmer(“hiekay”,”Python”,”hiekay@gmail.com”,”Ubutun”,”hiekay.github.io”)
print “My name is:%s”%writer.author()
print “I write program by:%s”%python.pythoner()[1]

上面这段代码,运行起来没有什么问题,但是,仔细看,发现有两个类,一个名字叫做Person,另外一个叫做Programmer,这还不是问题所在,问题所在是这两个类的构造函数中,存在这相同的地方:self.name=name,self.lang=lang,self.email=email,这对于追求代码质量的程序员,一般是不允许的。*好不要有重复代码或者冗余代码。可是,在两个类中都要有这些参数,应该怎么办呢?

子类、父类和继承
看下面的代码,里面有两个类A,B。这段程序能够正确运行,每个类的功能是仅仅打印指定的内容。

#!/usr/bin/env python
#coding:utf-8

class A:
def __init__(self):
print “aaa”

class B:
def __init__(self):
print “bbb”

if __name__==”__main__”:
a = A()
b = B()

#运行结果
aaa
上面的两个类彼此之间没有所谓的父子关系。现在稍加改变,将类B改写,注意观察与上面的差异。

#!/usr/bin/env python
#coding:utf-8

class A:
def __init__(self):
print “aaa”

class B(A): #这里和上面程序不同。B继承了A
def __init__(self):
print “bbb”

if __name__==”__main__”:
a = A()
b = B()

#运行结果
这段程序中,类B跟前面的那段有一点不同,class B(A):,这样写就表明了B相对A的关系:B是A的子类,B从A继承A的所有东西(子承父业)。

但是,运行结果一样。是的,那是以为在B中尽管继承了A,但是没有调用任何A的东西,就好比儿子从老爸那里继承了财富,但是儿子一个子也没动,外界看到的和没有继承一样。

#!/usr/bin/env python
#coding:utf-8

class A:
def __init__(self):
print “aaa”

class B(A):
def __init__(self):
#print “bbb”
A.__init__(self) #运行继承的父类

if __name__==”__main__”:
a = A()
b = B()

#运行结果

这回运行结果有了变化,本来b=B()是运行类B,但是B继承了A,并且在初始化的构造函数中,引入A的构造函数,所以,就运行A的结果相应结果了。

下面把*开头的那端程序用子类继承的方式重写,可以是这样的:

#!/usr/bin/env python
#coding:utf-8

class Person:
def __init__(self, name, lang, email):
self.name = name
self.lang = lang
self.email = email

def author(self):
return self.name
“””
class Programmer:
def __init__(self, name, lang, email, system, website):
self.name = name
self.lang = lang
self.email = email
self.system = system
self.website = website

def pythoner(self):
pythoner_list = [ self.name, self.lang, self.email, self.system, self.website ]
return pythoner_list
“””

class Programmer(Person): #继承父类Person
def __init__(self, name, lang, email, system, website):
Person.__init__(self,name,lang,email) #将Person.__init__()的功能继承到这里
#self.name = name #这三句是Person中已经搞定的,就不用重复
#self.lang = lang #通过继承已经实现了这三句的功能
#self.email = email
self.system = system #子类中不同于Person父类部分
self.website = website

def pythoner(self):
pythoner_list = [ self.name, self.lang, self.email, self.system, self.website ]
return pythoner_list

if __name__==”__main__”:
writer = Person(“hiekay”,”Chinese”,”hiekay@gmail.com”)
python = Programmer(“hiekay”,”Python”,”hiekay@gmail.com”,”Ubutun”,”hiekay.github.io”)
print “My name is:%s”%writer.author()
print “I write program by:%s”%python.pythoner()[1]
1
代码运行结果与前面一样。

需要提供注意的是,在子类中,如果要继承父类,必须用显明的方式将所继承的父类方法写出来,例如上面的Person.init(self,name,lang,email),必须这样写,才能算是在子类中进行了继承。如果不写上,是没有继承的。用编程江湖的黑话(比较文雅地称为“行话”)说就是“显式调用父类方法”。

对于为什么要用继承:

从技术上说,OOP里,继承*主要的用途是实现多态。对于多态而言,重要的是接口继承性,属性和行为是否存在继承性,这是不一定的。事实上,大量工程实践表明,重度的行为继承会导致系统过度复杂和臃肿, 反而会降低灵活性。因此现在比较提倡的是基于接口的轻度继承理念。这种模型里因为父类(接口类)完全没有代码,因此根本谈不上什么代码复用了。

在Python里,因为存在Duck Type,接口定义的重要性大大的降低,继承的作用也进一步的被削弱了。

另外,从逻辑上说,继承的目的也不是为了复用代码,而是为了理顺关系。

国外服务器和域名哪家强

小型网址,暂时不想搞域名备案了,后续在搞,先把服务搞起来

前期个人折腾着玩用,哪家性价比比较高呀

以及国外机器有没有能够国内速度的方式,香港 /日本机房?

求推荐性价比搞得虚拟机和域名服务商

之前搞过 digitalocean 和 linode 搭建播客

herozzm 1
herozzm 177 天前 via Android
服务器 vps 是 linode *强,域名选 nameslio 支持 whois 保护
foMM 2
foMM 177 天前
楼主的标题问的是强,强的话各种云都可以,亚马逊,Azure,谷歌云等。

帖子内容问的是性价比高,那么就 DigitalOcena,Linode 之类的不错。

如果追求*致省钱,可以弄个静态网页放 github page 上(完全免费)。或者花钱买个域名把博客放 netlify 上面(服务器免费)。
Rxianbei 3
Rxianbei 177 天前 via Android
域名的话我是去爸爸买的,服务器是枫叶主机。前者北美,后者香港。
h503mc 4
h503mc 177 天前 via iPhone
域名的话 namesilo
mm2x 5
mm2x 177 天前
域名 腾讯云 服务器 腾讯轻量香港
EvilCult 6
EvilCult 177 天前
google 域名??
据说没有溢价??不太确定,但我的那个破域名确实比在狗爹上便宜了那么一丢丢.
zeocax 7
zeocax 177 天前 via Android
@EvilCult Google Domain 大部分域名都会贵吧……
zeocax 8
zeocax 177 天前 via Android
https://tld-list.com/
域名价格的话可以用这个
Love4Taylor 9
Love4Taylor 177 天前 via Android
cloudflare registrar
EvilCult 10
EvilCult 177 天前
@zeocax
哈??是这样嘛???捂脸~~~
当初忘了在哪看的了……我又看了下,还真是贵嘿…..(是 google 涨价了还是狗爹降价了??)
忘了我当初为啥转走的了….慌乱!!

jiagm 177 天前 via Android
porkbun 主要后缀都是*便宜(或接近*便宜),支持绑定银联的中国区 PayPal 付款。
noqwerty 12
noqwerty 177 天前 via Android
买域名有很多选择,namecheap, nameslio 都不错,续费可以考虑转到 cloudflare,价格不变
ronman 13
ronman 177 天前 via Android
namesilo,便宜
不想折腾的话,静态博客直接 vercel 托管,还有香港,台湾服务器,国内访问挺快。
ipadpro4k 14
ipadpro4k 177 天前 via iPhone
namesilo 后台超难用,dns 生效超级慢
BenX 15
BenX 177 天前
namecheap
fengchang 16
fengchang 177 天前
域名我 N 年前做了一次比较,全都迁移到 namecheap 了。

VPS 对性能没要求的话,aws lightsail 有 $3.5 的 512MB RAM 实例,Linode 和 DO 都是 $5 起。
leishi1313 17
leishi1313 177 天前 via Android
便宜建站*近肯定是腾讯云轻量啊,24/月,CN2 线路国内三网都还行
davidyin 18
davidyin 177 天前
域名是 namesilo,然后转到 cloudflare 。
mason961125 19
mason961125 177 天前 via iPhone
@herozzm #1 Linode *强如认真的?
shiji 20
shiji 177 天前
@mason961125 曾经是。现在也没差到哪去。一线那几个 SSD VPS 排名基本都来回浮动。
steley 21
steley 177 天前
域名可以看一下这个网站
https://tldes.com/cheapest-domains
maxcho 22
maxcho 177 天前
域名 Namesilo, Google Domains 或者 Cloudflare Registrar 都不错,服务器考虑性价比的话可以看看 UpCloud
stranger75 23
stranger75 177 天前
阿里云香港轻量,1c1g 峰值带宽 30M 每月流量有 1TB,一个月才 24,不香嘛
XiLingHost 24
XiLingHost 176 天前
如果有用 cloudflare 的话,域名建议直接在 cloudflare 上注册,挺便宜的
服务器的话 aws 、gcp 、azure 这些大型云服务提供商的都挺好用的,sla 也都能支持企业级使用,如果是个人的话,阿里云和 vultr 、linode 、digitalocean 这些都是可以的
Westitan 25
Westitan 171 天前
试试搬瓦工 VPS 吧,主要是稳定,线路优秀
https://bwgbbs.com/stock.htm
idtaanlcoe 26
idtaanlcoe 164 天前 via Android
域名 namesilo 主机的话就多了去了
palmerkay316 27
palmerkay316 150 天前
托管或者租用香港或者日本的服务器,这个要看你需要什么配置的了
lyg 28
lyg 5 天前 via iPhone
https://git.io/fjFAw

golang中多种方式设置时区

go语言的time.Now()返回的是当地时区时间

time.Now().Format(“2006-01-02 15:04:05”)
1
time设置自定义时区

var cstSh, _ = time.LoadLocation(“Asia/Shanghai”) //上海
fmt.Println(“SH : “, time.Now().In(cstSh).Format(“2006-01-02 15:04:05”))
1
2
LoadLocation 有个问题,它依赖于 IANA Time Zone Database (简称 tzdata 吧) 这个数据库,一般linux系统都带了,但是windows系统就没带。所以如果windows系统没有安装go环境,调用LoadLocation就会报错。

当前解决方法也有:

1、我们可以自己把tzdata文件放到自己的程序目录中,然后让 time 包能够从我们自己的程序目录中加载时区文件就可以了。

文件目录可以通过环境变量设置,在main方法中:

os.Setenv(“ZONEINFO”, ‘/home/tz/data.zip’)
1
然后再调用 LoadLocation 方法就可以了。

下载tzdata

2、使用时区方式 推荐方式

var cstZone = time.FixedZone(“CST”, 8*3600) // 东八区
fmt.Println(“SH : “, time.Now().In(cstZone).Format(“2006-01-02 15:04:05”))
1
2
全局设置
如果说要设置全局的time时区配置应该如何做?

main.go(主函数处)增加一个初始化方法

func initInMain() {
var cstZone = time.FixedZone(“CST”, 8*3600) // 东八
time.Local = cstZone
}
1
2
3
4
将定义的时区实例赋值给time.Local

推荐阅读

Redis工具收费后新的开源已出现

GitHub上Star*高的工程师技能图谱

中国程序员*容易发错的单词

推荐!!! Markdown图标索引网站

 

颠覆认知的ios代码,真机实测!

记录一段神奇的代码。关键代码:
[self performSelector:@selector(recreateCommonWebView) withObject:nil afterDelay:0.1];
注释掉以后,日志执行顺序正常;否则,异步变同步。

(WKWebView *)dequeueCommonWebView
{
[self.commonSet addObject:self.preparedCommonWebView];

// 避免影响本次的加载。 5秒已经足够长了。

[self performSelector:@selector(recreateCommonWebView) withObject:nil afterDelay:0.1];

//@weakify_self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//@strongify_self;
NSLog(@“async setup!”);
//self.preparedCommonWebView = nil;
});

NSLog(@“sync logging!”);

return nil;

// NSLog(@“current count in common = %@”, @(self.commonSet.count));
//
// if (self.preparedCommonWebView == nil)
// {
// NSLog(@“error, prepared nil!”);
// }
//
// return self.preparedCommonWebView;
}

ios7 新特性:module研究

在苹果官网下载了名叫PrivacyPrompts的demo,结果在ios7系统真机上编译报错。

发现原因是因为使用了@import UIKit;这种语法引起的,该语法被称为module,具体可参考如下链接:

http://stackoverflow.com/questions/18947516/import-vs-import-ios-7
后来自建了demo测试只改动一行代码,把appdelegate中的

#import 改为@import UIKit;仍然报错,现在没有找到对应的解决办法,在网上也无资料可查。

结论:ios7中的module特性可能尚未成熟或者存在配置上的问题,目前真机无法使用。 也请知道该问题解决办法的朋友给我反馈,谢谢!

蓝桥杯算法之成绩分析

问题引入:
小蓝给学生们组织了一场考试,卷面总分为100分,每个学生的得分都是一个0到100的整数。
请计算这次考试的*高分、*低分和平均分。

输入格式:
输入的*行包含一个整数n,表示考试人数。
接下来n行,每行包含一个0至100的整数,表示一个学生的得分。

输出格式:
输出三行。
*行包含一个整数,表示*高分。
第二行包含一个整数,表示*低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分

样例输入:
7
80
92
56
74
88
99
10
样例输出:
99
10
71.29

解题思路:
首先当输入n个数字(代表成绩)的时候,那么就要求将这几个数字都提取到,此时可以使用List集合。(使用List集合的原因:因为List集合是有序可重复的集合,可重复指代当输入一个数字的时候,可以继续输入另一个相同的数,那么这和输入成绩的情况相似,因为输入成绩可能重复输入)。接着就可以将List集合排序,然后取到*个和*后一个数字代表*低和*高分了。

具体代码如下:
————————————————
%title插图%num

%title插图%num

python类方法的使用

python类方法的使用

分类专栏: python编程 文章标签: python类方法的使用 python中@classmethod使用 @classmethod使用 isinstance()函数判断对象类型 python判断对象类型
版权
python类方法的使用
一、python类方法的特性
二、测试示例
三、使用isinstance()函数判断对象类型
一、python类方法的特性
1、与静态方法一样,类方法可以通过类名调用类方法。
2、与静态方法一样,类成员方法无法访问对象实体变量,可以访问类的静态变量。
3、类方法需要传入代表本类的cls参数。
4、使用@classmethod定义类方法。

二、测试示例
class ClassFunc:
var1 = “string1” #类的静态变量

def __init__(self):
self.var2 = ‘string2’ # 实例变量,在类方法中无法访问

@classmethod
def class_func(cls):
print(str(cls)+” can visit var1:”+cls.var1)
print(str(cls)+” can’t visit var2″)
1
2
3
4
5
6
7
ClassFunc.class_func()

cFunc = ClassFunc() cFunc.class_func()

运行结果如下:%title插图%num

三、使用isinstance()函数判断对象类型
1、使用isinstance()函数可以检测给定的对象是否属于或者继承于某个类或者类型,如果是返回True,否则返回False。

2、测试示例:

class MyIsInstance:
def init(self):
pass

myInstance = MyIsInstance() print(isinstance(myInstance,MyIsInstance))

运行结果:%title插图%num

说明:如有错误,欢迎指正。。。

在阿里云防火墙屏蔽 mysql 端口(mysql 拒*一切外网 IP),为什么还是可以扫描出漏洞?

阿里云防火墙的配置规则是:
1.默认拒*一切连接,只开放 80,443,ssh (换高位端口号)
2.ssh 只允许阿里云局域网内另一台跳板机进行连接,公网是无法直连 ssh 的

我们的主营业务都是一些事.业单位的网站以及公众号,前些天合作方管信息安全的部门说我们的网站有漏洞,都集中在 mysql 和 ssh

我们的系统都是部署在阿里云的,难道阿里云的防火墙还能放行某种连接,让别人获得 mysql 和 ssh 版本信息?求网络安全的大佬解答。。。。

鉴于单.位.领.导必须要求修补漏洞,不然会影响他们的年度政~绩

目前解决办法:

1.对 mysql 打补丁 or 升级版本,因为那台主机配置高,承载的业务也很多,重度依赖 mysql,对其升级,可能会带来不可预料的事情发生

2.除了阿里云的防火墙,Centos 内的 iptable 也开启

3.开跳板机(上面的软件和系统*新),修改域名解析地址指向跳板机,而跳板机转发 http/https 流量到业务主机,让扫描者扫描跳板机

codehz 104 天前 via Android ❤️ 2
说明已经进入到内网渗透的步骤了
agdhole 2
agdhole 104 天前
也可能是网站程序被黑了?
jptx 3
jptx 104 天前
是不是他们把扫描程序放到你的服务器里了,可能是别人配合放的
ericwood067 4
ericwood067 104 天前
你的 mysql 既然要拒*一切外网 ip,直接监听 127.0.0.1 好了。有内网访问需要都话,在机器上也要启用自己都防火墙,只允许特定 ip 访问。
阿里云的防火墙没用过,不知道能不能阻止内网其他机器对你的攻击;你的客户请的测试团队可能通过阿里内网对你进行了攻击测试;所以不能完全依赖阿里的防火墙。
ice2016 5
ice2016 104 天前
这个漏扫设备就可以扫描到,
mysql 不是*新版的话,漏洞很多,
在就是 ssl 和 ssh 升级到*新版,还有各种配置。。
joyhub2140 6
joyhub2140 104 天前
@codehz
@ericwood067

1.漏洞报告书是市.网.信.办那边出具的,不知道他们那边有无特.权绕过防火墙做这个漏洞扫描。
2.阿里云每周都会发送安全报告邮件给我,或许,是上.层那边有权力直接从阿里云获取这部分安全报告?
longaiwp 7
longaiwp 104 天前
我记得每一台标准的阿里云服务器内部都有一个阿里云的安全进程,所以能扫描出漏洞不奇怪吧,应该说是一件很正常的事情。
est 8
est 104 天前
因为阿里云的漏洞扫描请求是 127.0.0.1 发起的。每个主机都跑着个远控进程。。。(黑方便!
joyhub2140 9
joyhub2140 104 天前
@est
@longaiwp 对!有个 aliyundun 的进程和 watchdog 进行
Xusually 10
Xusually 104 天前
阿里云有看门狗在你主机里。
在里面扫描的,不是从外面。
wunonglin 104 天前
用阿里云的 mysql 呗,有漏洞就赖阿里云
AIFNI45Mdxn 12
AIFNI45Mdxn 104 天前
禁止外网只能防止被任意用户通过外网访问到,但是你本身业务是需要访问数据库,也会连接 mysql 。如果是网站本身有漏洞,从而会影响数据库的安全性,赶紧修复你自己网站的漏洞并可以搭配使用安全防护产品哈哈哈哈

单个 Activity 控件过多,对手机影响大么?

单个 Activity 控件过多,对手机影响大么?
以小米 8 为例

现在有个 Activity 用于显示设备的某些信息,设备有好几项属性需要显示,所以我在一个 Activity 里面使用 ViewPager 来显示设备信息,用户左右滑动就能查看设备的信息。

但随着需求越来越多,导致 ViewPager 所在的 Activity 控件越来越多,比如*个页面时设备基本信息,大概有近 20 个信息,每个信息都至少需要一个 TextView 和 TextEdit,有些条目还要 Spinner,多个 RadioButton 等。这样 ViewPager 的一个页面就有 50 多个各种控件

第二个页面是设备连接其他设备的列表,大概 60 多个页面

第三个页面是设备的当前支持的一些协议信息,控件 100+。。。。

然后因为小公司,也没有架构师,所以导致需求不断增加,ViewPager 的页面不断增加,而 ViewPager 所在的 Activity 里的控件非常多,目前各种 TextView,TextEdit,Spinner,Radiobutton,Button 等已经超过 700 个了

我向问下以小米 8 为例,这样一个包含这么多控件的 Activity,对手机的硬件压力大吗?

• 2021-03-04 09:27:17 +08:00
SwiftFrank 1
SwiftFrank 24 天前
建议了解下 Android UI 的渲染相关知识,简单点讲效率跟你单个 Layout(XML)的嵌套层级有关系,推荐使用 ConstrainLayout,页面尽量解耦,方便维护和测试。另外建议看看 Jetpack Compose 的 Navigation 组件,应用单 Activity 的设计。
ssynhtn 2
ssynhtn 24 天前 via Android
太长的页面可以换成 recyclerview
QBugHunter 3
QBugHunter 24 天前
@ssynhtn
每个页面的显示设备某个方面的信息,每个页面之间的信息没有太多的关联以及共同点,用 recyclerview 这种滚动页面用户体验不太好
QBugHunter 4
QBugHunter 24 天前
@SwiftFrank
ViewPager 的每个页面嵌套非常简单,每个页面都是诺干行,每行一个都是 TextView+TextEdit/RadioButton/Spinner 等
QBugHunter 5
QBugHunter 24 天前
@SwiftFrank
每个页面布局文件就 2-3 层嵌套,就是控件的数目比较大。。。
coolesting 6
coolesting 24 天前 via Android
viewpager 里面放的是 fragment,每次翻页都 replace 掉,不会有太大的性能消耗。

如果你数据是一直加载却一直用 add 的方式来添加内容,那估计肯定消耗内存的。
KNOX 7
KNOX 24 天前 via Android
考虑下 ViewPager2? 因为是基于 RecyclerView 实现的,可以利用复用来减轻实时渲染压力,而且不应该只看一个设备。
NexTooo 8
NexTooo 24 天前
@QBugHunter #3 纯好奇,单个页面如果要全塞下几十个 View 显示信息的话,那字体应该不能大到哪儿去,这种情况下用户体验好么……
QBugHunter 9
QBugHunter 24 天前
@NexTooo
没有,比如设备状态,需要 TextView+2 个 RadioButton(开和关)+RadioGroup,总计 4 个控件
然后一个设备信息页面,有十几条这样的信息,一个屏幕可以显示 10 条+,用一个 ScrollView 滚动*多半个屏幕就可以显示全部信息了,对于用户来说不算糟糕,但这样一个页面十几条信息,每条 3-5 个控件,总计就 40+了

一个页面向下滚动*长的都没有超过 1 个屏幕,但那个页面控件 100+。。。

然后这个 ViewPager 有 6 个 view,现在还要加。。。。。

因为设计一改再改,所以 ViewPager 所在的 Activity 的控件数量就非常多了(加上刚提的需求,可能会超过 800 )
mcluyu 10
mcluyu 24 天前
不是 Android 开发,有类似性能调试工具的直接看下渲染,滑动时性能消耗什么样?总的来说你这些东西看起来都不如随便拉出个游戏消耗的 1/10 多。。

Arthur5 11
Arthur5 24 天前
@QBugHunter 一屏就 40 个控件还好吧。不显示的控件又不会绘制到屏幕上,上下滑动的页面用 RecyclerView 复用,左右滑动的 ViewPager 默认只保留当前和左一右一的 3 个页面。
StrorageBox 12
StrorageBox 24 天前
看你怎么写的了,如果 google 建议写法,正确添加的 fragment,没有任何问题。
不过看你所说“一个页面向下滚动*长的都没有超过 1 个屏幕,但那个页面控件 100+。。”,就知道不容乐观了,会有问题的,建议先学习一下 Android 绘制相关知识还有 viewpager1 的机制及 Android 界面的内存使用这三方面知识,然后再着手进行优化。
QBugHunter 13
QBugHunter 24 天前
@Arthur5
一个页面 40-100 个控件,然后这个 ViewPage 目前 6 个页面,现在还要再加 3 个。。。。
NexTooo 14
NexTooo 23 天前
@QBugHunter 我是觉得你可能需要先确定目前的绘制性能消耗如何,有必要了再优化吧,比如*限开到 9 个界面之后的情况。因为感觉如你这么说,要么不动,动起来是个蛮大的工程了。但我感觉若是基本的绘制优化做到位,应该不会有太大的问题,毕竟都是很简单的 View 而不是一些带复杂动画、大内存控件。
你可以看看绘制层级、View 嵌套层级这两块的优化模式,以及 ViewPager1 的机制进一步优化 Fragment 的回收与重建。细节的话我不清楚具体的情况就想不到别的,能想到的就是多个格式不同的文本可以通过富文本拼接的方式合并成一个 TextView
lwlizhe 15
lwlizhe 23 天前
我感觉控件数量跟渲染没啥关系吧

如果卡的话应该是控件本身的问题,或者层级结构什么的,或者说一个控件里面有个 xml 需要解析这种,总之应该是 xml 的锅;
要是直接 textView 那帮没啥 xml 内容的东西应该不影响渲染吧;无非就是 canvas 本身的操作,这块应该没啥问题吧;

我觉的现在你们这更大的问题反而是维护成本问题……假如来个人接手代码,会不会看一眼直接爆炸~
QBugHunter 16
QBugHunter 23 天前
@lwlizhe
这是我接手别人的代码。。。。。
QBugHunter 17
QBugHunter 23 天前
@lwlizhe
想换成碎片,但项目太赶了,我还有别的事情要处理,实在没时间把这个 ViewPager 里的 View 全部换成碎片了,所以只能暂时再加几个 View
pekki 18
pekki 23 天前
屏幕总共就那点大,怎么可能放下几十个控件,详细了解一下 android 屏幕绘制的机制,只不过是不断的重复绘制罢了,性能上影响不大,你看视频每秒都在重绘几十次也不卡啊。
lwlizhe 19
lwlizhe 23 天前
@QBugHunter 略表同情……感觉除了这块,还有其他地方的坑在等着你……这应该是个大坑项目~
hongch 20
hongch 21 天前
如果几十个控件 tv 、et 都会影响到性能的话,你让那些做游戏的怎么办?

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速