當前位置:首頁 » 安卓系統 » androidcservice

androidcservice

發布時間: 2022-05-01 19:43:19

『壹』 Android關閉service

stopService(new Intent(當前Activity.this, 後台Service.class));
這個是可以的啊

『貳』 既然android service是運行在主線程中的,那service還有什麼用

你沒有將android 組件和android C/S架構的概念理解清楚,不僅沒有理解清楚,還把組件的概念,跟線程、進程混淆在一起了。 我將android比喻成一棟辦公大樓,android 中進程就是一個辦公室,線程就是辦公室裡面的員工,辦公室是不能幹活的,而真正幹活的是這個辦公室裡面的員工。一個員工只能在一個辦公室裡面幹活,而一個辦公室可以有很多員工。 Android的老闆希望它的公司能辦理的井井有條,於是針對每一種職能專門設立管理部門,例如WMS,負責窗口管理的,例如MPS,負責多媒體播放的。 一個部門可以有一個或多個辦公室,一個辦公室也可以有多個部門。 而android的管理部門往往是不幹什麼實事的,就像我們的天朝的猿類,你推它一下,它才動一下。所以android需要一些干實事的部門,做對外客戶的,這些部門我們統稱為apk。Android中有好多這種部門,於是為了防止這些部門瞎干,又把部門分成Activity、Service、BrocastReceiver、ContentProvider四種子部門,這些子部門就是用來跟其它部門做溝通的,而所有的子部門運作時都會由大管家AMS來記錄在案。 Activity,做門面的。 Service,做對外支持的。 BrocastReceiver,做門衛收信的。 ContentProvider,做倉庫管理的。 做門面的,可以做對外支持的活,也可以做倉庫管理的活。但是外面可不這么認為,它想找你要數據,只會找ContentProvier,找對外支持只會找Service。 另外AMS大管家有個不好的習慣,它為了節省公司的資源,AMS那裡沒有你這個apk任何部門運行記錄的時候,它有可能把你的電關了(殺進程)。 而LZ你描述的問題呢,就是你的部門想下載東西,是由Activity子部門去干呢,還是Service去干。

『叄』 android uevent 怎麼獲取

Device Year Class 的主要功能是根據 CPU核數、時鍾頻率 以及 內存大小 對設備進行分級。代碼很簡單,只包含兩個類: DeviceInfo-> 獲取設備參數, YearClass-> 根據參數進行分級。 下表是 Facebook 公司提供的分級標准,其中Year欄表示分級結果。 Year Cores Clock RAM 2008 1 528MHz 192MB 2009 n/a 600MHz 290MB 2010 n/a 1.0GHz 512MB 2011 2 1.2GHz 1GB 2012 4 1.5GHz 1.5GB 2013 n/a 2.0GHz 2GB 2014 n/a >2GHz >2GB 關於輸出年份的計算方法可以參考源碼,本文只把一些比較常用的功能抽取出來做一個簡要介紹。 獲取 CPU 核數 我們都知道,Linux 中的設備都是以文件的形式存在,CPU 也不例外,因此 CPU 的文件個數就等價與核數。 Android 的 CPU 設備文件位於/sys/devices/system/cpu/目錄,文件名的的格式為cpu\d+。 ? 1 2 3 4 5 6 7 8 9 10 root@generic_x86_64:/sys/devices/system/cpu # ls <b>cpu0</b> cpufreq cpuidle kernel_max modalias offline online possible power present uevent 統計一下文件個數便可以獲得 CPU 核數。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 public static int getNumberOfCPUCores() { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { // Gingerbread doesn't support giving a single application access to both cores, but a // handful of devices (Atrix 4G and Droid X2 for example) were released with a al-core // chipset and Gingerbread; that can let an app in the background run without impacting // the foreground application. But for our purposes, it makes them single core. return 1; } int cores; try { cores = new File("/sys/devices/system/cpu/").listFiles(CPU_FILTER).length; } catch (SecurityException e) { cores = DEVICEINFO_UNKNOWN; } catch (NullPointerException e) { cores = DEVICEINFO_UNKNOWN; } return cores; } private static final FileFilter CPU_FILTER = new FileFilter() { @Override public boolean accept(File pathname) { String path = pathname.getName(); //regex is slow, so checking char by char. if (path.startsWith("cpu")) { for (int i = 3; i < path.length(); i++) { if (path.charAt(i) < '0' path.charAt(i) > '9') { return false; } } return true; } return false; } }; 回到頂部 獲取時鍾頻率 獲取時鍾頻率需要讀取系統文件 -/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq或者/proc/cpuinfo。 我的 Android 模擬器中並沒有cpuinfo_max_freq文件,因此只能讀取/proc/cpuinfo。 /proc/cpuinfo包含了很多 cpu 數據。 ? processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 70 model name : Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz stepping : 1 cpu MHz : 0.000 cache size : 1024 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 4 wp : yes 代碼如下: public static int getCPUMaxFreqKHz() { int maxFreq = DEVICEINFO_UNKNOWN; try { for (int i = 0; i < getNumberOfCPUCores(); i++) { String filename = "/sys/devices/system/cpu/cpu" + i + "/cpufreq/cpuinfo_max_freq"; File cpuInfoMaxFreqFile = new File(filename); if (cpuInfoMaxFreqFile.exists()) { byte[] buffer = new byte[128]; FileInputStream stream = new FileInputStream(cpuInfoMaxFreqFile); try { stream.read(buffer); int endIndex = 0; //Trim the first number out of the byte buffer. while (buffer[endIndex] >= '0' && buffer[endIndex] <= '9' && endIndex < buffer.length) endIndex++; String str = new String(buffer, 0, endIndex); Integer freqBound = Integer.parseInt(str); if (freqBound > maxFreq) maxFreq = freqBound; } catch (NumberFormatException e) { //Fall through and use /proc/cpuinfo. } finally { stream.close(); } } } if (maxFreq == DEVICEINFO_UNKNOWN) { FileInputStream stream = new FileInputStream("/proc/cpuinfo"); try { int freqBound = parseFileForValue("cpu MHz", stream); freqBound *= 1000; //MHz -> kHz if (freqBound > maxFreq) maxFreq = freqBound; } finally { stream.close(); } } } catch (IOException e) { maxFreq = DEVICEINFO_UNKNOWN; //Fall through and return unknown. } return maxFreq; } 回到頂部 獲取內存大小 如果 SDK 版本大於等於JELLY_BEAN,可以通過ActivityManager來獲取內從大小。 ? ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo(); ActivityManager am = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE); am.getMemoryInfo(memInfo); 如果版本低於JELLY_BEAN,則只能讀取系統文件了。 ? FileInputStream stream = new FileInputStream("/proc/meminfo"); totalMem = parseFileForValue("MemTotal", stream); 完整代碼如下: @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public static long getTotalMemory(Context c) { // memInfo.totalMem not supported in pre-Jelly Bean APIs. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo(); ActivityManager am = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE); am.getMemoryInfo(memInfo); if (memInfo != null) { return memInfo.totalMem; } else { return DEVICEINFO_UNKNOWN; } } else { long totalMem = DEVICEINFO_UNKNOWN; try { FileInputStream stream = new FileInputStream("/proc/meminfo"); try { totalMem = parseFileForValue("MemTotal", stream); totalMem *= 1024; } finally { stream.close(); } } catch (IOException e) { } return totalMem; } }

『肆』 android service 怎麼結束activity

方法一:
public class mService extends Service {
//保存在service中的Activity對象
private static mActivity m;
//啟動服務
static void startservice(Context c){
m=(mActivity)c;
Intent iService=new Intent(c,mService.class);
iService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
c.startService(iService);
}
//關閉服務
static void stopservice(Context c){
Intent iService=new Intent(c,mService.class);
iService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
c.stopService(iService);
}
……
//在mService中關閉mActivity
m.finish();
}

public class mActivity extends Activity {

// private MediaPlayer mMPlayer;
/*
* (non-javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
……
//啟動mService
mService.startservice(mActivity.this);
……
//停止mService
mService.stopservice(mActivity.this);

}
}

方法二:
主要包括3部分
1. 定義application類,這個類可以保存獲取activity實例,記得manifest中加入android:name=".MyApp"
public class MyApp extends Application{
private MyServiceActivity myActivity;

public void setInstance(MyServiceActivity instance){
myActivity = instance;
}

public MyServiceActivity getInstance(){
return myActivity;
}
}
2. 在activity中保存實例
public class MyServiceActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((MyApp)getApplication()).setInstance(this);
……
}
}
3. 在service中取回實例
public class MyService extends Service {
MyServiceActivity myActivity;
@Override
public void onCreate() {
super.onCreate();
setForeground(true);
android.os.Debug.waitForDebugger();
myActivity = ((MyApp)getApplication()).getInstance();
……
}
}

『伍』 Android 在開機啟動一個service之後,如何實現在規定的時間發送一個狀態欄通知

android如何實現開機自動啟動Service或app(轉)第一步:首先創建一個廣播接收者,重構其抽象方法onReceive(Contextcontext,Intentintent),在其中啟動你想要啟動的Service或app。importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;{//重寫onReceive方法@OverridepublicvoidonReceive(Contextcontext,Intentintent){//後邊的XXX.class就是要啟動的服務Intentservice=newIntent(context,XXXclass);context.startService(service);Log.v("TAG","開機自動服務自動啟動..");//啟動應用,參數為需要自動啟動的應用的包名Intentintent=getPackageManager().getLaunchIntentForPackage(packageName);context.startActivity(intent);}}第二步:配置xml文件,在receiver接收這種添加intent-filter配置第三步:添加許可權2、自啟動失敗的原因接收不到BOOT_COMPLETED廣播可能的原因(1)、BOOT_COMPLETED對應的action和uses-permission沒有一起添加(2)、應用安裝到了sd卡內,安裝在sd卡內的應用是收不到BOOT_COMPLETED廣播的(3)、系統開啟了FastBoot模式,這種模式下系統啟動並不會發送BOOT_COMPLETED廣播(4)、應用程序安裝後重來沒有啟動過,這種情況下應用程序接收不到任何廣播,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等。Android3.1之後,系統為了加強了安全性控制,應用程序安裝後或是(設置)應用管理中被強制關閉後處於stopped狀態,在這種狀態下接收不到任何廣播。直到被啟動過(用戶打開或是其他應用調用)才會脫離這種狀態,所以Android3.1之後(1)、應用程序無法在安裝後自己啟動(2)、沒有ui的程序必須通過其他應用激活才能啟動,如它的Activity、Service、ContentProvider被其他應用調用。存在一種例外,就是應用程序被adbpushyou.apk/system/app/下是會自動啟動的,不處於stopped狀態。具體說明見:3、adb發送BOOT_COMPLETED我們可以通過1adbshellambroadcast-aandroid.intent.action.BOOT_COMPLETED命令發送BOOT_COMPLETED廣播,而不用重啟測試機或模擬器來測試BOOT_COMPLETED廣播,這條命令可以更精確的發送到某個package,如下:1adbshellambroadcast-aandroid.intent.action.BOOT_COMPLETED-candroid.intent.category.HOME-npackage_name/class_name

『陸』 android c語言可以bind service嗎

1.新建Service類BindService。在BindService類里新建內部類MyBinder,繼承自Binder(Binder實現IBinder介面)。MyBinder提供方法返回BindService實例。
public class MyBinder extends Binder{

public BindService getService(){
return BindService.this;
}
}

實例化MyBinder得到mybinder對象;
重寫onBind()方法:
@Override

『柒』 android/jni/com_android_server_input_InputManagerService.cpp 這個我得手機裡面怎麼找不到 要root

input服務的啟動:
android啟動的時候會啟動很多個service,這個可以參考SystemServer. Java ,會啟動 InputManagerService 這個服務:

[objc] view plain
print ?
Slog .i (TAG, "Input Manager" );
inputManager = new InputManagerService(context, wmHandler);

...

ServiceManager .addService (Context .INPUT_SERVICE , inputManager);
直接看InputManagerService.java中的start函數:
[java] view plain
print ?
public void start() {
Slog.i(TAG, "Starting input manager" );
nativeStart(mPtr); //調用了本地方法,JNI對應的cpp 在server下的jni目錄下

...

}

這個牽扯到android的server的jni,最開始是在SystemServer中載入android_server這個動態庫,
至於這個動態庫的編譯可參考/frameworks/base/services/jni/Android.mk中的內容
所以在調用這個nativeStart方法時,相關的動態庫已經載入到SystemServer的進程中。

『捌』 android 五大應用開發框架是什麼

android應用開發框架是 Application Framework,其系統架構由5部分組成,分別是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。

1、Linux Kernel (Linux內核)

Android基於Linux 2.6提供核心系統服務,例如:安全、內存管理、進程管理、網路 堆棧、驅動模型。Linux Kernel也作為硬體和軟體之間的抽象層,它隱藏具體硬體細節而為上層提供統一的服務。

2、Android Runtime (運行庫)

Android包含一個核心庫的集合,提供大部分在Java編程語言核心類庫中可用的功能。每一個Android應用程序是Dalvik虛擬機中的實例,運行在他們自己的進程中。

Dalvik虛擬機設計成,在一個設備可以高效地運行多個虛擬機。Dalvik虛擬機可執行文件格式是.dex,dex格式是專為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。 大多數虛擬機包括JVM都是基於棧的,而Dalvik虛擬機則是基於寄存器的。

3、Libraries (程序庫)

Android包含一個C/C++庫的集合,供Android系統的各個組件使用。這些功能通過Android的應用程序框架(application framework)暴露給開發者。

4、Application Framework (應用框架層)

通過提供開放的開發平台,Android使開發者能夠編制極其豐富和新穎的應用程序。開發者可以自由地利用設備硬體優勢、訪問位置信息、運行後台服務、設置鬧鍾、向狀態欄添加通知等等,很多很多。 開發者可以完全使用核心應用程序所使用的框架APIs。

應用程序的體系結構旨在簡化組件的重用,任何應用程序都能發布他的功能且任何其他應用程序可以使用這些功能(需要服從框架執行的安全限制)。這一機制允許用戶替換組件。

5、Applications(應用層)

Android裝配一個核心應用程序集合,包括電子郵件客戶端、SMS程序、日歷、地圖、瀏覽器、聯系人和其他設置。所有應用程序都是用Java編程語言寫的。Android本身是一套軟體堆迭(Software Stack),或稱為「軟體迭層架構」,迭層主要分成三層:操作系統、中間件、應用程序。

(8)androidcservice擴展閱讀

開發人員也可以完全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發布它的功能塊並且任何其它的應用程序都可以使用其所發布的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。

隱藏在每個應用後面的是一系列的服務和系統,其中包括;

豐富而又可擴展的視圖(Views),可以用來構建應用程序,它包括列表(lists),網格(grids),文本框(textBoxes),按鈕(buttons),甚至可嵌入的web瀏覽器。

內容提供器(ContentProviders)使得應用程序可以訪問另一個應用程序的數據(如聯系人資料庫),或者共享它們自己的數據

資源管理器(ResourceManager)提供非代碼資源的訪問,如本地字元串,圖形,和布局文件(layoutfiles)。

通知管理器(NotificationManager)使得應用程序可以在狀態欄中顯示自定義的提示信息。

活動管理器(ActivityManager)用來管理應用程序生命周期並提供常用的導航回退功能。

『玖』 android C/S模式應用系統如何搭建框架

我來簡單的說下,讓你容易理解:
1.系統物理架構
android客戶端------無線路由-------(web伺服器,資料庫)
2.技術選型
(android客戶端)--->Web伺服器(tomcat)--->資料庫(mysql等)
客戶端請求數據成功後,返回數據(可以通過Web Service、HTTP等方式進行網路通信)
(android客戶端)<---Web伺服器(tomcat)<-->資料庫(mysql等)
3.創建客戶端項目WirelessClient(到時安裝在手機端)和伺服器項目WirelessServer(安裝在web伺服器端PC機)。之後分別開發這兩端的項目,手機端用android的API,伺服器端用Java開發

這樣可以幫助你簡單的理解了嗎?

『拾』 android service+broadcastreceiver怎麼實現秒錶計時器

BroadcastReceiver中不是有context么,可以直接獲得啊。如果你不想這么做的話,加一個靜態的publicstaticContextc,實現其set和get方法,set裡面在初始化時候MainActivity.c=MainActivity.this;這樣在你的廣播裡面這樣調用MainActivity.c.getSystemService();即可。

熱點內容
c語言自考 發布:2025-05-15 07:52:42 瀏覽:499
壓縮的玉 發布:2025-05-15 07:51:22 瀏覽:788
android的控制項 發布:2025-05-15 07:50:36 瀏覽:551
南崗法院伺服器ip地址 發布:2025-05-15 07:46:02 瀏覽:286
實況如何退出賬號安卓 發布:2025-05-15 07:45:56 瀏覽:917
深入編譯器 發布:2025-05-15 07:41:35 瀏覽:878
電信手機號服務密碼怎麼查 發布:2025-05-15 07:40:10 瀏覽:613
python全局變數文件 發布:2025-05-15 07:35:06 瀏覽:954
位元組和存儲位元組 發布:2025-05-15 07:32:10 瀏覽:521
linux應用開發工程師 發布:2025-05-15 07:32:07 瀏覽:261