闹钟实例与远程机制AIDL工具android:process=":remote"结合应用
来源:互联网 发布:广联达软件安装 编辑:程序博客网 时间:2024/06/11 12:48
由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。
在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。
通过代码来实现这个数据传输过程是冗长乏味的,Android提供了AIDL工具来处理这项工作。
这里通过与闹钟实例来实现这一机制的简单实现:
闹钟设置的实现是通过AlarmManager来实现的,AlarmManager提供系统警报服务,AlarmManager就会通过onReceive方法来执行这个事件,而将事件传给onReceive就是通过注册 ,然后利用android:process=”:remote这一机制来实现的。
<receiver android:name=".AlarnReceiver" android:process=":remote"> </receiver>
而android:process=” :remote“意思就是说你配的这个组件会在另外一个进程中运行,这里面另一个就是pendingIntent,pendingIntent是一种特殊的Intent。
主要的区别在于Intent的执行立刻的,而pendingIntent的执行不是立刻的。pendingIntent执行的操作实质上是参数传进来的Intent的操作,但是使用pendingIntent的目的在于它所包含的Intent的操作的执行是需要满足某些条件的。
源码如下:
package com.example.administrator.myapplication;import android.app.AlarmManager;import android.app.PendingIntent;import android.app.TimePickerDialog;import android.content.Intent;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.TimePicker;import java.util.Calendar;/** * Created by Administrator on 2017/6/3. */public class MainActivityI extends AppCompatActivity { Button mButton1; Button mButton2; TextView mTextView; Calendar calendar; /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* 实例模式 */ calendar = Calendar.getInstance(); mTextView = (TextView) findViewById(R.id.text); mButton1 = (Button) findViewById(R.id.set); mButton2 = (Button) findViewById(R.id.cancle); mButton1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //获取当前时间 calendar.setTimeInMillis(System.currentTimeMillis()); int mHour = calendar.get(Calendar.HOUR_OF_DAY); int mMinute = calendar.get(Calendar.MINUTE); new TimePickerDialog(MainActivityI.this, new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); calendar.set(Calendar.MINUTE, minute); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); /* 建立Intent和PendingIntent,来调用目标组件 */ Intent intent = new Intent(MainActivityI.this, AlarnReceiver.class); /*从系统取得一个用于向BroadcastReceiver的Intent广播的PendingIntent对象*/ PendingIntent pendingIntent = PendingIntent. getBroadcast(MainActivityI.this, 0, intent, 0); AlarmManager am; /* 获取闹钟管理的实例 */ am = (AlarmManager) getSystemService(ALARM_SERVICE); /* 设置闹钟 */ am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); /* 设置周期闹 */ am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), (24 * 60 * 60 * 1000), pendingIntent); String tmpS = "设置闹钟时间为" + format(hourOfDay) + ":" + format(minute); mTextView.setText(tmpS); } }, mHour, mMinute, true).show(); } }); mButton2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivityI.this, AlarnReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivityI.this, 0, intent, 0); AlarmManager am; /* 获取闹钟管理的实例 */ am = (AlarmManager) getSystemService(ALARM_SERVICE); /* 取消 */ am.cancel(pendingIntent); mTextView.setText("闹钟已取消!"); } }); } /* 格式化字符串(7:3->07:03) */ private String format(int x) { String s = "" + x; if (s.length() == 1) s = "0" + s; return s; }}
广播:
package com.example.administrator.myapplication;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;/** * Created by Administrator on 2017/6/3. */public class AlarnReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "你设置的闹钟时间到了", Toast.LENGTH_LONG).show(); }}
布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.administrator.myapplication.MainActivity"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/set" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="set" /> <Button android:id="@+id/cancle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="cancle" /></LinearLayout>
//清单文件 <activity android:name=".MainActivityI"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".AlarnReceiver" android:process=":remote"> </receiver>
参考:
闹钟实例与远程机制AIDL工具android:process=”:remote”结合应用
阅读全文
0 0
- 闹钟实例与远程机制AIDL工具android:process=":remote"结合应用
- 闹钟实例与远程机制AIDL工具android:process=":remote"结合应用
- android:process=":remote"
- android:process=":remote" .
- android:process=":remote"
- android:process=":remote" .
- android:process=":remote"
- android:process=":remote"
- android:process=":remote"
- android:process=":remote"
- Android入门——远程Remote Service AIDL详解及应用
- Android Binder机制的Native应用&&Android系统RPC与Binder && Android Service学习之AIDL, Parcelable和远程服务
- android:process=":remote"属性
- Android应用内跨进程通信AIDL实例与源码
- 安卓远程工具 Android Remote
- Android工作实践总结:Aidl 远程调用(aidl实例总结)
- Android工作实践总结:Aidl 远程调用(aidl实例总结)
- android:process=":remote"属性解说
- builder模式——实现具名可变参数
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 B: qwb与矩阵
- x86 保护模式寻址
- 新概念4-11
- 静态顺序表接口的简单实现
- 闹钟实例与远程机制AIDL工具android:process=":remote"结合应用
- IOS基础控件 UISwitch swift3.1
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 C: 勤劳的ACgirls
- 微信小程序开发mac上面卡死的解决办法
- 蓝桥-ALGO-19-方格取数
- 333. Largest BST Subtree
- Introduction to the Spring IoC container and beans
- python爬虫-模拟登陆新浪微+博爬取感兴趣人的所有信息
- POJ 1716 Integer Intervals(差分约束)