博采众长,精于一技。Live for love, work for dream.

Android的AsyncTask简单用法

android.os.AsyncTask
AsyncTask

三个泛型参数:
Param 任务执行器需要的数据类型
Progress 后台计算中使用的进度单位数据类型
Result 后台计算返回结果的数据类型
有些参数是可以设置为不使用的,只要传递为Void型即可,比如AsyncTask

四个步骤:
onPreExecute(),执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件。
doInBackground(Params…),后台进程执行的具体计算在这里实 现,doInBackground(Params…)是AsyncTask的关键,此方法必须重载。在这个方法内可以使用 publishProgress(Progress…)改变当前的进度值。
onProgressUpdate(Progress…),运行于UI线程。如果在doInBackground(Params…)中 使用了publishProgress(Progress…),就会触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。
onPostExecute(Result),运行于UI线程,可以对后台任务的结果做出处理,结果就是doInBackground(Params…)的返回值。此方法也要经常重载,如果Result为null表明后台任务没有完成(被取消或者出现异常)。

这4个方法都不能手动调用。而且除了doInBackground(Params…)方法,其余3个方法都是被UI线程所调用的,所以要求:
1) AsyncTask的实例必须在UI thread中创建;
2) AsyncTask.execute方法必须在UI thread中调用;

Task只能被执行一次,多次调用时将会出现异常,而且是不能手动停止。
package com.test;
 
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class AsyncTaskTest extends Activity {
    TextView tv;
    final String TAG="AsyncTaskTest";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) findViewById(R.id.label);
        new MyTask().execute(6, 12, 7);
 
    }
 
    class MyTask extends AsyncTask<Integer, Integer, Integer> {
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Log.d(TAG, "onPreExecute()");
        }
 
        @Override
        protected Integer doInBackground(Integer... params) {
            Log.d(TAG, "doInBackground()");
            int p = 0;
            for (int index = 0; index < params.length; index++) {
                int num = params[index];
                for (int j = 0; j < num; j++) {
                    if (num - j <= 0) {
                        break;
                    }
                    p++;
                    publishProgress(p);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            return p;
        }
 
        @Override
        protected void onProgressUpdate(Integer... progress) {
            Log.d(TAG, "onProgressUpdate()");
            tv.append("\nProgress: " + progress[0]);
        }
 
        @Override
        protected void onPostExecute(Integer result) {
            Log.d(TAG, "onPostExecute()");
            tv.append("\nFinished. Result: " + result);
        }
 
        @Override
        protected void onCancelled() {
            super.onCancelled();
            Log.d(TAG, "onCancelled()");
        }
    }
 
}

破解WordPress主题eval(base64_decode加密

加密方式一:eval(gzinflate(base64_decode("codes")))
破解代码:

< ?php
/*
Taken from http://www.php.net/manual/
de/function.eval.php#59862
Directions:
1. Save this snippet as decrypt.php
2. Save encoded PHP code in coded.txt
3. Create a blank file called decoded.txt 
(from shell do CHMOD 0666 decoded.txt)
4. Execute this script (visit decrypt.php in 
a web browser or do php decrypt.php in the shell)
5. Open decoded.txt, the PHP should be decrypted 
if not post the code on http://www.ariadoss.
com/forums/web-development/lamp
gzinflate执行PHP eval加密代码的解密方法翻译为中文后的文字
(此段汉字原始文件里面可没.嘿)
1. 把这整段脚本保存为decrypt.php
2. 把需要解密的代码保存为coded.txt并且和decrypt.php在同一目录.
3. 创建一个空白文件命名为 decoded.txt (必须把 decoded.
txt 的权限设置为CHMOD 0666,也就是可以写入的.当然,你可以
不创建文件文件.只要文件夹有写入权限,脚本便会自动创建一个
名为decoded.txt的文档. )
4. 运行PHP eval加密解密脚本 (浏览器中运行decrypt.php 即访问 http:
//您的域名/存放目录/decrypt.php)
5. 打开 decoded.txt, 代码应该已经解密完成,如果出现错误请
把代码发送到 http://www.ariadoss.com/forums/web-
development/lamp
*/
echo "\nDECODE nested eval(gzinflate()) by DEBO 
Jurgen /", "", $contents);
eval(preg_replace("/eval/", "\$contents=", 
$contents)); } echo "3. Writing decoded.txt\n"; 
$fp2 = fopen("decoded.txt","w"); fwrite($fp2, 
trim($contents)); fclose($fp2);

加密方式二:eval(base64_decode
破解方法:
例如:
<?php /* WARNING: This file is protected by copyright law. To reverse engineer or decode this file is strictly prohibited. */
$o="QAAADTs4d293J25pZGtyY2InLwAAU0JKV0tGU0JXRlNPJyknIACAKGVoc3NoaikCUCAuPCc4OQ0AEg0ODg07KGNucTkOAKANOwCgJwAQbmM6JWFoaHNidSUCEA0ODUQAEmh3fnVuYG9zJyFkALA8JwZzYgASZG9oJ2Nmc2IvIF4E8Dg5AYRlAARraGBuaWFoLyBpZmpiAaMhaQwAY2Z0bwOlAidjYnRkdW53c25oYABpApAJICk7ZXUnKDkNRmljdWgAAG5jZidzb2JqYidhdWhqJzsAAGYnb3ViYTolb3Nzdz0oKHAAAnBwKWJxYnV+c29uaWBmAyMpAABodWAoYWh1cmolJ3Nuc2tiKgA6JQTEJwFidAFwZnVgYnM6JVhlAj5rZmlsJTkCCzsoZg9wEXUR5AB2FhJwKiB3WBITLxRjOxWQY345AlBvc2prORAAJw0nABE=";eval(base64_decode("JGxsbD0wO2V2YWwoYmFzZTY0X2RlY29kZSgiSkd4c2JHeHNiR3hzYkd4c1BTZGlZWE5sTmpSZlpHVmpiMlJsSnpzPSIpKTskbGw9MDtldmFsKCRsbGxsbGxsbGxsbCgiSkd4c2JHeHNiR3hzYkd3OUoyOXlaQ2M3IikpOyRsbGxsPTA7JGxsbGxsPTM7ZXZhbCgkbGxsbGxsbGxsbGwoIkpHdzlKR3hzYkd4c2JHeHNiR3hzS0NSdktUcz0iKSk7JGxsbGxsbGw9MDskbGxsbGxsPSgkbGxsbGxsbGxsbCgkbFsxXSk8PDgpKyRsbGxsbGxsbGxsKCRsWzJdKTtldmFsKCRsbGxsbGxsbGxsbCgiSkd4c2JHeHNiR3hzYkd4c2JHdzlKM04wY214bGJpYzciKSk7JGxsbGxsbGxsbD0xNjskbGxsbGxsbGw9IiI7Zm9yKDskbGxsbGw8JGxsbGxsbGxsbGxsbGwoJGwpOyl7aWYoJGxsbGxsbGxsbD09MCl7JGxsbGxsbD0oJGxsbGxsbGxsbGwoJGxbJGxsbGxsKytdKTw8OCk7JGxsbGxsbCs9JGxsbGxsbGxsbGwoJGxbJGxsbGxsKytdKTskbGxsbGxsbGxsPTE2O31pZigkbGxsbGxsJjB4ODAwMCl7JGxsbD0oJGxsbGxsbGxsbGwoJGxbJGxsbGxsKytdKTw8NCk7JGxsbCs9KCRsbGxsbGxsbGxsKCRsWyRsbGxsbF0pPj40KTtpZigkbGxsKXskbGw9KCRsbGxsbGxsbGxsKCRsWyRsbGxsbCsrXSkmMHgwZikrMztmb3IoJGxsbGw9MDskbGxsbDwkbGw7JGxsbGwrKykkbGxsbGxsbGxbJGxsbGxsbGwrJGxsbGxdPSRsbGxsbGxsbFskbGxsbGxsbC0kbGxsKyRsbGxsXTskbGxsbGxsbCs9JGxsO31lbHNleyRsbD0oJGxsbGxsbGxsbGwoJGxbJGxsbGxsKytdKTw8OCk7JGxsKz0kbGxsbGxsbGxsbCgkbFskbGxsbGwrK10pKzE2O2ZvcigkbGxsbD0wOyRsbGxsPCRsbDskbGxsbGxsbGxbJGxsbGxsbGwrJGxsbGwrK109JGxsbGxsbGxsbGwoJGxbJGxsbGxsXSkpOyRsbGxsbCsrOyRsbGxsbGxsKz0kbGw7fX1lbHNlJGxsbGxsbGxsWyRsbGxsbGxsKytdPSRsbGxsbGxsbGxsKCRsWyRsbGxsbCsrXSk7JGxsbGxsbDw8PTE7JGxsbGxsbGxsbC0tO31ldmFsKCRsbGxsbGxsbGxsbCgiSkd4c2JHeHNiR3hzYkd4c2JEMG5ZMmh5SnpzPSIpKTskbGxsbGw9MDtldmFsKCRsbGxsbGxsbGxsbCgiSkd4c2JHeHNiR3hzYkQwaVB5SXVKR3hzYkd4c2JHeHNiR3hzYkNnMk1pazciKSk7JGxsbGxsbGxsbGw9IiI7Zm9yKDskbGxsbGw8JGxsbGxsbGw7KXskbGxsbGxsbGxsbC49JGxsbGxsbGxsbGxsbCgkbGxsbGxsbGxbJGxsbGxsKytdXjB4MDcpO31ldmFsKCRsbGxsbGxsbGxsbCgiSkd4c2JHeHNiR3hzYkM0OUpHeHNiR3hzYkd4c2JHd3VKR3hzYkd4c2JHeHNiR3hzYkNnMk1Da3VJajhpT3c9PSIpKTtldmFsKCRsbGxsbGxsbGwpOw=="));return;?>

首先把eval改成echo
结果将会变成:
<?php

/* WARNING: This file is protected by copyright law. To reverse engineer or decode this file is strictly prohibited. */
$o "QAAADTs4d293J25pZGtyY2InLwAAU0JKV0tGU0JXRlNPJyknIACAKGVoc3NoaikCUCAuPCc4OQ0AEg0ODg07KGNucTkOAKANOwCgJwAQbmM6JWFoaHNidSUCEA0ODUQAEmh3fnVuYG9zJyFkALA8JwZzYgASZG9oJ2Nmc2IvIF4E8Dg5AYRlAARraGBuaWFoLyBpZmpiAaMhaQwAY2Z0bwOlAidjYnRkdW53c25oYABpApAJICk7ZXUnKDkNRmljdWgAAG5jZidzb2JqYidhdWhqJzsAAGYnb3ViYTolb3Nzdz0oKHAAAnBwKWJxYnV+c29uaWBmAyMpAABodWAoYWh1cmolJ3Nuc2tiKgA6JQTEJwFidAFwZnVgYnM6JVhlAj5rZmlsJTkCCzsoZg9wEXUR5AB2FhJwKiB3WBITLxRjOxWQY345AlBvc2prORAAJw0nABE=";
$lll 0;
eval(
base64_decode("JGxsbGxsbGxsbGxsPSdiYXNlNjRfZGVjb2RlJzs="));
$ll 0;
eval(
$lllllllllll("JGxsbGxsbGxsbGw9J29yZCc7"));
$llll 0;
$lllll 3;
eval(
$lllllllllll("JGw9JGxsbGxsbGxsbGxsKCRvKTs="));
$lllllll 0;
$llllll = ($llllllllll($l[1]) << 8) + $llllllllll($l[2]);
eval(
$lllllllllll("JGxsbGxsbGxsbGxsbGw9J3N0cmxlbic7"));
$lllllllll 16;
$llllllll "";
for (; 
$lllll $lllllllllllll($l);) {
    if (
$lllllllll == 0) {
        
$llllll = ($llllllllll($l[$lllll++]) << 8);
        
$llllll+=$llllllllll($l[$lllll++]);
        
$lllllllll 16;
    }if (
$llllll 0x8000) {
        
$lll = ($llllllllll($l[$lllll++]) << 4);
        
$lll+= ( $llllllllll($l[$lllll]) >> 4);
        if (
$lll) {
            
$ll = ($llllllllll($l[$lllll++]) & 0x0f) + 3;
            for (
$llll 0$llll $ll$llll++
                )
$llllllll[$lllllll $llll] = $llllllll[$lllllll $lll $llll];$lllllll+=$ll;
        } else {
            
$ll = ($llllllllll($l[$lllll++]) << 8);
            
$ll+=$llllllllll($l[$lllll++]) + 16;
            for (
$llll 0$llll $ll$llllllll[$lllllll $llll++] = $llllllllll($l[$lllll])
                );
$lllll++;
            
$lllllll+=$ll;
        }
    }else
        
$llllllll[$lllllll++] = $llllllllll($l[$lllll++]);$llllll<<=1;
    
$lllllllll--;
}eval(
$lllllllllll("JGxsbGxsbGxsbGxsbD0nY2hyJzs="));
$lllll 0;
eval(
$lllllllllll("JGxsbGxsbGxsbD0iPyIuJGxsbGxsbGxsbGxsbCg2Mik7"));
$llllllllll "";
for (; 
$lllll $lllllll;) {
    
$llllllllll.=$llllllllllll($llllllll[$lllll++] ^ 0x07);
}eval(
$lllllllllll("JGxsbGxsbGxsbC49JGxsbGxsbGxsbGwuJGxsbGxsbGxsbGxsbCg2MCkuIj8iOw=="));
eval (
$lllllllll);

然后把最后一句的eval换成echo或者file_put_contents ('cracked.txt', $lllllllll); 大功告成!

PS.此方法仅供参考,并不提倡大家去破解。如非特殊情况,请尊重主题作者,保留版权。

在线生成二维码

看到星星大神闲着无聊,做了这样一个东西,URL To Barcode。我想说,其实没有必要这么折腾,直接调用Google的Chart API就可以了。

例如本博客地址为:http://blog.rebill.info
二维码的地址为:http://chart.apis.google.com/chart?cht=qr&chs=350x350&chl=http%3A%2F%2Fblog.rebill.info
当然,你也可以直接生成图片:
<img src="http://chart.apis.google.com/chart?cht=qr&chs=350x350&chl=http%3A%2F%2Fblog.rebill.info" />
效果如下:
QR code online generator

参考
API地址:QR Codes Chart API
ZXing 也做了个:QR Code Generator,可以生成各类二维码。

Ubuntu下使用Eclipse在真机开发Android程序

如果你在Ubuntu Linux下开发Android程序,你需要添加一个Android USB规则文件
sudo vim /etc/udev/rules.d/51-android.rules
然后在里面填入(以HTC手机为例,它的USB标识为0bb4,注意:不同的手机有不同的USB标识,请根据自己的手机型号进行填写,参考下方的对照表)
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
当然最后别望了增加可读权限
sudo chmod a+r /etc/udev/rules.d/51-android.rules

USB制造商标识对照表

ManufacturerUSB Vendor ID
Acer 0502
Dell 413c
Foxconn 0489
Garmin-Asus 091E
HTC 0bb4
Huawei 12d1
Kyocera 0482
LG 1004
Motorola 22b8
Nvidia 0955
Pantech 10A9
Samsung 04e8
Sharp 04dd
Sony Ericsson 0fce
ZTE 19D2

参考地址:http://developer.android.com/guide/developing/device.html

Android软件 - 领带打法

不知道如何打领带?
不知道哪一种领带打法适合您及您的服装?
不知道怎样保养您的领带?
不知道如何选择和购买一条好领带?
这个应用能帮助各位男士解答这些问题。我们将给您详细的指示和图解,让您轻松学会打领带的方法。
现时普遍使用的打领带方法有四种,它们是驷马车结、半温莎结、温莎结和普瑞特结。首三种是传统的领带打法,人们已使用了很久,普瑞特结则是一个较为近期的系领带方法,它在1989年以后始为公众所熟悉。
初学者的第一个问题通常是:「我需要哪一种领带打法呢?」这个应用能给您一些建议。

s1.png

s3.png

下载地址:http://android.rebill.info/download/apps/EasyTie.apk

更多Android软件请访问:http://android.rebill.info/

返回顶部