如果返回START_NOT_STICKY,表示當(dāng)Service運(yùn)行的進(jìn)程被Android系統(tǒng)強(qiáng)制殺掉之后,不會(huì)重新創(chuàng)建該Service,當(dāng)然如果在其被殺掉之后一段時(shí)間又調(diào)用了startService,那么該Service又將被實(shí)例化。那什么情境下返回該值比較恰當(dāng)呢?如果我們某個(gè)Service執(zhí)行的工作被中斷幾次無(wú)關(guān)緊要或者對(duì)Android內(nèi)存緊張的情況下需要被殺掉且不會(huì)立即重新創(chuàng)建這種行為也可接受,那么我們便可將 onStartCommand的返回值設(shè)置為START_NOT_STICKY。舉個(gè)例子,某個(gè)Service需要定時(shí)從服務(wù)器獲取最新數(shù)據(jù):通過一個(gè)定時(shí)器每隔指定的N分鐘讓定時(shí)器啟動(dòng)Service去獲取服務(wù)端的最新數(shù)據(jù)。當(dāng)執(zhí)行到Service的onStartCommand時(shí),在該方法內(nèi)再規(guī)劃一個(gè)N分鐘后的定時(shí)器用于再次啟動(dòng)該Service并開辟一個(gè)新的線程去執(zhí)行網(wǎng)絡(luò)操作。假設(shè)Service在從服務(wù)器獲取最新數(shù)據(jù)的過程中被Android系統(tǒng)強(qiáng)制殺掉,Service不會(huì)再重新創(chuàng)建,這也沒關(guān)系,因?yàn)樵龠^N分鐘定時(shí)器就會(huì)再次啟動(dòng)該Service并重新獲取數(shù)據(jù)。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比泰順網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式泰順網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋泰順地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
新建的類extends AsyncTask后要提供三個(gè)泛型參數(shù),并且重載需要的方法, 三個(gè)參數(shù)Params,Progress和Result,最后一個(gè)就是后臺(tái)操作后可以返回的值
看例子:
public class ProgressBarAsyncTask extends AsyncTaskInteger, Integer, String{
/**
* 這里的String參數(shù)對(duì)應(yīng)AsyncTask中的第三個(gè)參數(shù)(也就是接收doInBackground的返回值)
* 在doInBackground方法執(zhí)行結(jié)束之后在運(yùn)行,并且運(yùn)行在UI線程當(dāng)中 可以對(duì)UI空間進(jìn)行設(shè)置
*/
@Override
protected void onPostExecute(String result) {
textView.setText("異步操作執(zhí)行結(jié)束" + result);
}
}
重載的方法至少一個(gè)
[img]if...else分支結(jié)構(gòu)啊,肯定是條件不滿足才執(zhí)行了else分支返回null的,跟lath有沒有值沒有關(guān)系。
我模擬一下:
public?int[]?get(){
return?new?int[1];
}
//?調(diào)用get()
int[]?array?=?get();
//?使用array
System.out.println(array[0]);
您好,很高興能幫助您,
Android中webview和js之間的交互
1.android中利用webview調(diào)用網(wǎng)頁(yè)上的js代碼。
Android 中可以通過webview來(lái)實(shí)現(xiàn)和js的交互,在程序中調(diào)用js代碼,只需要將webview控件的支持js的屬性設(shè)置為true,,然后通過loadUrl就可以直接進(jìn)行調(diào)用,如下所示:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("javascript:test()");
2. 網(wǎng)頁(yè)上調(diào)用android中java代碼的方法
在網(wǎng)頁(yè)中調(diào)用java代碼,需要在webview控件中添加javascriptInterface。如下所示:
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
Toast.makeText(Test.this, "測(cè)試調(diào)用java", Toast.LENGTH_LONG).show();
}
});
}
}, "demo");
在網(wǎng)頁(yè)中,只需要像調(diào)用js方法一樣,進(jìn)行調(diào)用就可以
div id='b'a onclick="window.demo.clickOnAndroid()"b.c/a/div
3. Java代碼調(diào)用js并傳參
首先需要帶參數(shù)的js函數(shù),如function test(str),然后只需在調(diào)用js時(shí)傳入?yún)?shù)即可,如下所示:
mWebView.loadUrl("javascript:test('aa')");
4.Js中調(diào)用java函數(shù)并傳參
首先一樣需要帶參數(shù)的函數(shù)形式,但需注意此處的參數(shù)需要final類型,即得到以后不可修改,如果需要修改其中的值,可以先設(shè)置中間變量,然后進(jìn)行修改。如下所示:
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid(final int i) {
mHandler.post(new Runnable() {
public void run() {
int j = i;
j++;
Toast.makeText(Test.this, "測(cè)試調(diào)用java" + String.valueOf(j), Toast.LENGTH_LONG).show();
}
});
}
}, "demo");
然后在html頁(yè)面中,利用如下代碼div id='b'a onclick="window.demo.clickOnAndroid(2)"b.c/a/div,
即可實(shí)現(xiàn)調(diào)用
你的采納是我前進(jìn)的動(dòng)力,還有不懂的地方,請(qǐng)你繼續(xù)“追問”!
如你還有別的問題,可另外向我求助;答題不易,互相理解,互相幫助!