❶ android 請教如何從Thread中調用Activity里的方法謝謝
如果你的playSound方法里沒有修改界面的代碼,比如TextView.setText()這樣的方法,是可以直接在線程里調用這個方法的,可以直接訪問。如果要修改界面,就要用到handler類來進行。
❷ android開發中,如何在做一些耗時的操作時,另起一個新線程
handler其實就是消息處理機制。首先在主線程也就是UI創建一個Handler對象,復寫其中的handMessage( Message msg)方法。該方法里的msg就是子線程發來的消息,表示子線程處理完了,以這個msg來通知主線程。讓主線程來作UI的繪制工作。
那麼子線程工作完了就要發消息了,比如:
run(){
data = getDataFromInternet();//耗時工作
Message msg = handler.obtainMessage(0, data);//通過handler得到消息,該消息的標識為0,消息內容是data
handler.sendMessage(msg);//發送
}
然後handler在主線程就負責接收:
public Handler handler = new Handler(){//處理UI繪制
@SuppressWarnings("unchecked")
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
data = (List<Map<String, Object>>) msg.obj;
if(data == null){
Toast.makeText(AllMovieActivity.this, "網路連接失敗,獲取不到影片信息", 1).show();
}else {
adapter = new HotMoviedapter(AllMovieActivity.this, data, R.layout.allmovielist_item,
new String[] { "picurl", "chname", "director", "leadrole",
"fshowtime", "country" }, new int[] { R.id.picurl,
R.id.chname, R.id.director, R.id.leadrole,
R.id.fshowtime, R.id.country },mListView);
TextView v = new TextView(AllMovieActivity.this);
v.setHeight(80);
v.setSelectAllOnFocus(false);
mListView.addFooterView(v);
mListView.setAdapter(adapter);
}
break;
default:
break;
}
}
};
❸ 如何理解android多線程里的getLooper方法
下面的代碼是學習Handler.post方法的,第一種寫法沒有使用getLooper,結果運行的效果是一個線程,第二種寫法使用了getLooper,運行的效果是多線程的:
package com.WriteCode.AndroidHandlerPost;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.util.Log;
public class AndroidHandlerPost extends Activity {
private Handler mHandler = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//第一種寫法beg,不使用getLooper,那麼整個是一個線程(UI線程)
//mHandler = new Handler();
//第一種寫法end,不使用getLooper,那麼整個是一個線程(UI線程)
//第二種寫法beg,不使用getLooper,那麼整個是兩個線程
HandlerThread handlerThread = new HandlerThread("myHandlerThread");
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper());
//第二種寫法end,不使用getLooper,那麼整個是兩個線程
mHandler.post(new MyRunnable());
Log.e("OnCreate", "The Thread is: " + Thread.currentThread().getId());
setContentView(R.layout.main);
}
private class MyRunnable implements Runnable
{
@Override
public void run() {
// TODO Auto-generated method stub
Log.e("Runnable", "The Thread is running");
Log.e("Runnable", "The Thread is: " + Thread.currentThread().getId());
try
{
Thread.sleep(6000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
❹ android在activity啟用線程,沒有出錯,調試過了,不執行run()方法,附上代碼。
我 直接給你上代碼了,你看看線程是怎麼用的,希望你自己學會他!
public void OnClick(){
MyThread t1=new MyThread();
t1,start();
}
class MyThread implements Runnable {
public void run() {
你的代碼
}
}
❺ 安卓調試精靈 -超好用的通用調試工具
安卓調試精靈 是一款功能全面,簡單易用的輔助開發和調試工具。
1,安卓日誌抓取,實時日誌查看,關鍵字過濾,多橡雀文件保存。
2,在未配置adb的電腦上自動配置adb環境變數,實時adb連接狀態顯示。
3,進程id號,進程名,cpu使用率獲取,殺進程,線程總數獲取,進程內存實時顯示。旁如虧
4,獲取安卓設備上進程實時cpu使用率,進程名,線程名,支持性能數據保存成excel文件。
5,安卓設備上已安裝應用列表展示,卸載應用,打開應用,安裝應用,已運神安裝應用所在位置,已安裝應用大小,版本號,應用的界面名。
6,獲取安卓設備機器型號,版本基本信息,網路IP信息,內存信息,屏幕解析度,內存信息,電池信息,當前窗口包名,截屏,錄屏,按鍵模擬,廣播發送等。
7,附帶最新的反編譯工具,源碼查看工具,busybox等工具。
一,安卓設備的信息展示和快捷控制:
二,安卓設備上(手機)上正在運行的進程和內存信息,下圖所示是QQ的詳細內存信息展示:
三,性能模塊,展示進程所佔的cpu百分比,並支持保存為excel文檔,下圖是跑在我手機上的qq相關的進程:
四,已安裝的應用詳情介紹(下圖展示的是手機QQ的安裝位置,版本號,apk大小,有哪些Activity等):
五,實時日誌模塊,可根據進程號,關鍵字等過濾日誌:
六,幫助模塊,支持自動配置adb環境變數,小白也能輕松上手: