我正在开发基于Web的应用程序,该应用程序也应该在基于Android的手机上运行。 由于我没有我成功使用SDK中的模拟器。如何永久禁用Android浏览器缓存?
但正如我在不断变化的浏览器使用的旧版本了它的应用的一些JavaScript网页的The服务器上的高速缓存(缓存控制是正确的 - 但我没有在那里的正常使用情况下过多的缓存是想通过)
那么有没有办法告诉(默认)Android浏览器永久禁用它的缓存?
或者是否可以使用adb
命令清除缓存?
我正在开发基于Web的应用程序,该应用程序也应该在基于Android的手机上运行。 由于我没有我成功使用SDK中的模拟器。如何永久禁用Android浏览器缓存?
但正如我在不断变化的浏览器使用的旧版本了它的应用的一些JavaScript网页的The服务器上的高速缓存(缓存控制是正确的 - 但我没有在那里的正常使用情况下过多的缓存是想通过)
那么有没有办法告诉(默认)Android浏览器永久禁用它的缓存?
或者是否可以使用adb
命令清除缓存?
尝试追加每个呼叫的查询参数的时间(长整型,自epoch格式以来的ms)。这会阻止正在使用的缓存副本。我们在常规的J2EE/Struts/Tomcat堆栈中执行此操作,并且它适用于所有(桌面)浏览器。
如果你想在生产中缓存行为,很容易删除额外的参数。
在调试期间,向页面添加元标记以禁用缓存。
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
这不会在每个设备上工作。有些人只是无视它 – 2014-12-15 10:35:43
使用ADB命令可以清除浏览器缓存和用户数据
adb shell pm clear com.android.browser
,但如果你从Android程序运行
看到发出此这是不行的我前面question关于那
虽然这是临时解决方案,如果你需要清除android浏览器缓存连续使用后台运行服务它可以完成与“android.content.pm.IPackageDataObserver”。如果您寻找以下是该服务 它测试和工作正常
import java.util.List;
import android.app.PendingIntent;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageStats;
import android.os.Handler;
import android.os.IBinder;
public class CacheCleanerService extends Service {
public static final String REFRESH_INTENT="tritop.android.slwcachecleanerwidget.REFRESH";
public static final String CLEAR_INTENT="tritop.android.slwcachecleanerwidget.CLEAR";
public static final long RECOUNTNDELAY=1500;
private boolean mDND=false;
private Handler mHandler;
private int statsCounter;
private long mCacheSum;
private StatsObserver mStatsObs;
private ClearCacheObserver mClearObs;
private PackageManager mPM;
private List<PackageInfo> mInstPkg;
private Runnable mTriggerCount = new Runnable()
{
public void run()
{
countCache();
}
};
private Runnable mAutoKill = new Runnable()
{
public void run()
{
stopSelf();
}
};
//More info in ApplicationState.java @ android.git.kernel.org
class StatsObserver extends IPackageStatsObserver.Stub{
public void onGetStatsCompleted(PackageStats stats,boolean bl){
mCacheSum+=stats.cacheSize;
statsCounter++;
if(statsCounter>=mInstPkg.size()){
updateWidgets();
}
}
}
class ClearCacheObserver extends IPackageDataObserver.Stub {
public void onRemoveCompleted(final String packageName, final boolean succeeded) {
}
}
private void countCache() {
statsCounter = 0;
mCacheSum = 0;
mInstPkg= mPM.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES |
PackageManager.GET_DISABLED_COMPONENTS);
for(PackageInfo pInfo: mInstPkg){
// mPM.getPackageSizeInfo(pInfo.packageName, mStatsObs);
}
}
private void clearCache(){
mInstPkg= mPM.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES |
PackageManager.GET_DISABLED_COMPONENTS);
//mPM.freeStorageAndNotify(Integer.MAX_VALUE, mClearObs);
//mPM.freeStorageAndNotify(Long.MAX_VALUE, mClearObs);
mHandler.postDelayed(mTriggerCount, RECOUNTNDELAY);
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
mStatsObs = new StatsObserver();
mClearObs = new ClearCacheObserver();
mPM = getPackageManager();
mHandler = new Handler();
}
@Override
public void onDestroy() {
mHandler.removeCallbacks(mAutoKill);
mHandler.removeCallbacks(mTriggerCount);
mDND=false;
super.onDestroy();
}
@Override
public void onStart(Intent intent, int startId) {
if(!mDND){
mHandler.postDelayed(mAutoKill, 20000);
mDND=true;
mCacheSum=0;
statsCounter=0;
if(CLEAR_INTENT.equals(intent.getAction())){
clearCache();
}
else{
countCache();
}
}
}
}
我使用大量AJAX的不断刷新模拟器浏览器遇到了类似的问题。这两种方法对我有帮助。
AJAX - 设置请求标头以获取reqeust if-modified-since。
xhReq.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2005 00:00:00 GMT");
或者使用jQuery $就()
beforeSend: function(xhr) {
xhReq.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2005 00:00:00 GMT");
}
如果你碰巧使用PHP - 设置的头信息。
header("Expires: Sat, 1 Jan 2005 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
你为什么不使用缓存清单?
https://developer.mozilla.org/en/Offline_resources_in_Firefox
如果你把你的JS文件在网络部分,这应该做你需要的东西:
文件的网络中列出:在缓存清单文件节头是白名单需要连接到服务器的资源。即使用户处于离线状态,对这些资源的所有请求都会绕过缓存。可以使用通配符。
我正在使用Android模拟器,并能够通过打开浏览器并单击菜单来清除内置浏览器。在那里我选择了设置,然后选择了“隐私和安全”。这给了点击清除缓存的选项。
这也是我的问题。 – Neutralizer 2011-06-03 13:06:13