2013-04-09 69 views
0

我做了這個劇本,但不工作:Drop_caches通過應用程序無法正常工作

package com.mkyong.android; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 
import java.io.IOException; 
import com.example.toast.R; 

public class MainActivity extends Activity { 


private Button button; 

public void onCreate(Bundle savedInstanceState) { 
    final Runtime runtime = Runtime.getRuntime(); 
    try { 
     runtime.exec("su"); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tab1); 


    button = (Button) findViewById(R.id.button1); 
    button.setOnClickListener(new OnClickListener() { 
     @SuppressLint("SdCardPath") 
     @Override 
     public void onClick(View arg0) { 
      final Runtime runtime = Runtime.getRuntime(); 
      try { 
       runtime.exec("echo 3 > /proc/sys/vm/drop_caches"); 
       Toast.makeText(MainActivity.this, "Script lanciato con `successo, memoria svuotata.", Toast.LENGTH_LONG).show();` 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 
} 

不會釋放RAM內存:(而是通過終端模擬器goes..If我試圖改變指揮例如,做一個目錄與MKDIR去,去一個文件TXT,甚至寫作..有什麼錯?

回答

0

runtime.exec("su");剛開始shell進程。而你的下一個"runtime.exec("echo 3 > xxx")";沒有在第一殼執行。

我的建議是堅持用java.lang.process,啓動一個執行「su」並使用重定向stdin將命令寫入它的進程。

+0

你的意思的問題基本上是我的殼是firt(SU)後?所以我的過程不走?我的天哪我找不到出路:(。但爲什麼其他命令(mkdir等)去,這不是?這是不可思議的! – Davidebj 2013-04-10 12:26:44

+0

我試着再次改變和寫:runtime.exec( 「su -c /free.sh」);但是沒有......我也嘗試過runtime.exec(「su -c'/free.sh'」);沒有任何東西......我也嘗試過runtime.exec (「su -c echo 3> XXX」);但沒有任何變化!!!!!! wtf太難了!我嘗試了所有的東西! – Davidebj 2013-04-10 14:00:20

+0

當你說任何東西時,你的意思是內核沒有刪除所有的文件緩存?通過在您的adb外殼上執行此操作,確保它可以在您的設備上正常工作嗎? – Robin 2013-04-11 02:36:33

0

你可以試試這個。

try { 
Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "echo 3 > /proc/sys/vm/drop_caches" }); 
proc.waitFor(); 
} catch (Exception e) { 
Log.d("Exceptions", "Exception dropping caches: "+e); 
} 

OR

  Process p=null; 
      try { 
       p = new ProcessBuilder() 
       .command("PathToYourScript") 
       .start(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       if(p!=null) p.destroy(); 
      } 
+0

嗨,歡迎來到SO。很高興看到一個答案,但是當下一次問題被問到時,請注意這是一個非常古老的問題,並且不需要任何努力 – 2013-11-19 13:56:42

+1

嗨,謝謝你的歡迎,我沒有注意到這是一個古老的問題,但我從很老的問題中找到了有用的答案,也許這有助於某人,而寫答案可以幫助我更好地理解android。 – 2013-12-20 13:30:56

相關問題