jobschedulerのを使用してください

我々は、システムが最も力を実行するのに何時間知っているので、私たちのタスクはタスクがAPI経由でAndroidのタスクスケジューラを手渡しすることが可能かを同定することで、システムを決定するために、タスクの一部となります。
ポータルjobschedulerのは
、以下の、最初の必要性の例であるJobService

パブリッククラスMyJobServiceはJobService {延び
プライベート静的最終列LOG_TAG =「MyJobServiceを」;

@Override
公共ボイドのonCreate(){
super.onCreate()。
Log.i(LOG_TAG、 "MyJobService作成しました");
}

@Override
公共ボイドonDestroy(){
super.onDestroy()。
Log.i(LOG_TAG、 "MyJobServiceは破壊します")。
}

@Override
公共ブールonStartJob(JobParameters paramsは){
あなたがあなたの仕事のためのロジックをすべて実装する場所//これがあります。これが実行されることに注意してください
あなたは非同期の仕事のために別のスレッドを使用したいと思うでしょうので、メインスレッド上で//
(私たちは、ネットワーク接続を確立するには、以下の証明として)//。
//あなたが別のスレッドを使用する場合は、「再スケジュール」にする必要があることを示すためにtrueを返し
仕事の処理を完了するために将来のある時点での仕事に//リターンを。それ以外の場合は、
終了したらfalseを返す//。
Log.i(LOG_TAG、 "完全に、完全に仕事に取り組んで" + params.getJobId());
//まず、ネットワークをチェックして、接続を試みます。
IF(isNetworkConnected()){
新しいSimpleDownloadTask().execute(のparams);
trueを返します。
}他{
Log.i(LOG_TAG、 "ジョブに接続なし" + params.getJobId()+ ";悲しい顔")。
}
falseを返します。
}

@Override
公共ブールonStopJob(JobParameters paramsは){
ジョブがjobFinished前に停止しなければならない場合に呼び出されますが、//()が呼び出されました。これは、可能
な要件は、もはや、そのようなユーザーはもはやとして、満たされている場合は、//は起こりません
//無線LANに接続しない、またはデバイスがもはやアイドル状態。解決するために、このコールバックを使用します
//アプリケーションが停止中のジョブからの誤作動する恐れがあり何かを。
ジョブが指定した再試行の基準に基づいて再スケジュールする必要がある場合にtrueを返します//
ジョブが作成またはジョブを削除するにはfalseを返したとき//。かかわらず、値の
//返され、あなたの仕事は、実行を停止する必要があります。
Log.i(LOG_TAGは、 "仔は、何かが変わったので、私は仕事でそれを呼んでいる" + params.getJobId());
falseを返します。
}

/ **
*デバイスは、現在オンラインであるかどうかを判定します。
* /
プライベートブールisNetworkConnected(){
ConnectivityManager connectivityManager =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE)。
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo()。
リターン(!networkInfo = NULL && networkInfo.isConnected());
}

/ **
*離れて、メインUIスレッドからタスクを作成するAsyncTaskを使用します。このタスクは作成されます
*のHttpURLConnectionのを、その後、InputStreamとしてWebページのコンテンツをダウンロードします。
*入力ストリームは、次にによって記録された文字列に変換され、
* onPostExecute()メソッド。
* /
プライベートクラスSimpleDownloadTaskはAsyncTask <JobParameters、ボイド、文字列を> {拡張します

保護JobParameters mJobParam。

@Overrideは、
文字列doInBackground(JobParameters ...のparams){保護された
ジョブの要件を提供//キャッシュシステム
[0] = paramsはmJobParamと、
{試みる
のInputStreamが= nullです。
//取得のみWebページコンテンツの最初の50個の文字を表示します。
int型のlen = 50;

URLのURL =新しいURL( "https://www.google.com");
HttpURLConnectionのCONN =(HttpURLConnectionの)url.openConnection();
conn.setReadTimeout(10000); // 10秒
conn.setConnectTimeout(15000); // 15秒
conn.setRequestMethod( "GET");
//クエリの開始
)(conn.connectを。
INT応答= conn.getResponseCode()。
Log.d(LOG_TAGは、 "応答は:" +応答)。
ある= conn.getInputStream()。

//入力ストリームを文字列に変換する
リーダーリーダー= NULL;
リーダー=新しいInputStreamReaderの( "UTF-8"、です)。
char []バッファ=新しいCHAR [LEN]。
reader.read(バッファ)
新しいString(バッファー)を返します。

}キャッチ(のIOException e)の{
戻る"のWebページを取得することができません。";
}
}

@Override
{保護ボイドonPostExecute(文字列結果)
jobFinished(mJobParam、偽)。
Log.i(LOG_TAG、結果)。
}
}
}
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
次に、アクティビティボタンアナログトリガとJobService処理する複数のタスク。

パブリッククラスFreeTheWakelockActivityはActionBarActivity {延び
パブリック静的最終的な文字列LOG_TAG =「FreeTheWakelockActivityを」;

TextViewのmWakeLockMsg;
コンポーネント名mServiceComponent;

@Override
ボイドのonCreate(バンドルsavedInstanceState){保護
super.onCreate(savedInstanceState)。
setContentView(R.layout.activity_wakelock)。

mWakeLockMsg =(のTextView)findViewById(R.id.wakelock_txt)。
mServiceComponent =新しいコンポーネント名(この、MyJobService.class)。
テントstartServiceIntent =新しいテント(これ、MyJobService.class)。
STARTSERVICE(startServiceIntent)。

ボタンtheButtonThatWakelocks =(ボタン)findViewById(R.id.wakelock_poll)。
theButtonThatWakelocks.setText(R.string.poll_server_button)。

theButtonThatWakelocks.setOnClickListener(新しいView.OnClickListener(){
@Override
ます。public void onClickの(ビューV){
pollServer();
}
});
}

/ **
* jobschedulerのAPIを使用してこのメソッドをポーリングサーバー。このAPIを使用してジョブをスケジュールすることにより、
*あなたのアプリは、それが実行される自信があるが、ウェイクロックを必要とせずにすることができます。むしろ、
*のAPIは、ネットワークの仕事を取ると最高の利点を取るためにバッチでそれらを実行します
*初期ネットワーク接続コスト。
*
* jobschedulerのAPIは、バックグラウンドサービスを介して動作します。このサンプルでは、我々は
あなたが始めるためにMyJobServiceで単純なサービスを*。ジョブはここで予定されている
活動*が、ジョブ自体はstartJob()メソッドでMyJobServiceで実行されます。
*たとえば、サーバーをポーリングするために、あなたのGETを送り、ネットワーク接続を作成します
*要求し、すべてのMyJobServiceでの応答を処理します。これはjobschedulerのAPIができます
あなたの活動を再開するために必要なことなく、あなたのロジックを呼び出すために、*。
*
*サンプルで簡潔にするために、我々は、立て続けに同じジョブを複数回スケジュールされている
*が、もう一度、できるアプリケーションで時間をかけて発生した同様のタスクを検討してみてください
*待つ余裕とバッチ処理から利益を得ることができるし。
* /
公共ボイドpollServer(){
jobschedulerのスケジューラ=(jobschedulerの)getSystemService(Context.JOB_SCHEDULER_SERVICE)。
以下のために(int型私= 0;私++; iが10 <){
JOBINFO JOBINFOは=新しいJobInfo.Builder(I、mServiceComponent)
.setMinimumLatency(5000)// 5秒
.setOverrideDeadline(60000)// 60秒(試料中簡潔にするため)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)// WiFiまたはデータ接続
.build()。

mWakeLockMsg.append( "スケジューリングジョブ" + I + "\ n個!");
scheduler.schedule(JOBINFO)。
}
}
}
----------------

おすすめ

転載: www.cnblogs.com/hyhy904/p/11408518.html